Unity勉強中!あこがれだったプログラマーに今からなろう!

昔あこがれだったプログラマー。今からでもUnityを勉強してみようと思い立ち、チャレンジ開始! Unity勉強メモや、悪戦苦闘な日々の記録です。

Quaternionの意味を知らなくてもいいんだけど・・・

今日も、しまづさんのyoutubeシリーズで3D脱出ゲームの勉強です。

www.youtube.com

今日は、
# 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(今回の回転軸)に掛けることで、回転軸自体を回転させているから、補正になる。
ってことになるのだろうか🧐

つくづく、もっと数学勉強しとくんだったなぁ・・・💦