今日も、しまづさんのyoutubeシリーズで3D脱出ゲームの勉強です。
今日は、
# 08ズームパネルの作成
# 09ズームオブジェクトの作成
# 10ズームオブジェクトの回転
をやりました。
# 07アイテムの使用の時点で、ItemBoxの選択の初期化が抜けているように思えていたので
ちょっとドキドキしていたのですが、# 08ズームパネルの作成でしっかり対策されていました🤣
そりゃそうよね〜😆
それはともかく、今回の動画での一番の学びは、やっぱり「# 10ズームオブジェクトの回転」での、
Objectの回転軸を指定する方法と、その回転軸に補正をかける方法になると思う。
Quaternion.Euler(parent.rotation.eulerAngles)*Vector3.up
このQuaternionってのは、今までもなんとなく出てきて、何となく使っていたのだけど、
ちょっと興味をそそられたので、調べてみることにしました。
まず、Transform.rotation。ここのVector3はいわゆるオイラー角という表現になるらしい。
オイラー角は、XYZの角度をそのまま示しているので、とても判りやすいのだけど、どうやら、
このオイラー角同士の加算・減算にはあまり向かないらしい。
(何でなのかは理解できませんでした😭)
そこで、オイラー角度ではなく、xyzの他に回転軸を表す第四の数値wを追加して四元数なる表現で、
回転量を計算する方がいいらしい。
らしい。ばかりなのは、ちょっと、いや、だいぶ理解が追いついていないから🤣
ちょっと齧る程度では理解できませんでした😣
そんな中途半端な理解で、今回の補正について考えてみる。
まず、Unityのリファレンスマニュアル
docs.unity.cn
のQuaternion.Eulerの説明に、
public static Quaternion Euler (float x, float y, float z);
説明
Z 座標を軸に z 度、X 座標を軸に x 度、Y 座標を軸に y 度 (順番はこのとおり) 回転する回転を返します。
とあるので、
そこにparent.rotation.eulerAnglesを入れるという事は、親の角度になるための回転を求めて、
それをVector3.up(今回の回転軸)に掛けることで、回転軸自体を回転させているから、補正になる。
ってことになるのだろうか🧐
つくづく、もっと数学勉強しとくんだったなぁ・・・💦