[Unity] 指定した角度まで回したいの!!!

近頃Unityの勉強をチクチクしていて、地味に苦戦した回転周りの話。

やりたいこととしては、指定した角度まで指定の速度で回したい と非常にシンプルでした。
が…なぜか押しても正しく止まってくれない。

当初は安直に「今の角度取得して、比較して、目標超えたらとめればいい ぐらいのきもちで

こう書いたのですが、何故か止まらない。
そこで試しに transform.eulerAngles.x の値を Debug.Log(XXX); で確認していたら
なぜか 数字が増加したとおもったら減ったり+だったり-だったりする謎挙動。

そこで、よくよく調べてみたらUnityの場合、角度はオイラー角ではなくクォータニオンで持っているので
そっちでAngleを比較してあげた方がいいんじゃねーの?って事に行き着きました。
分からないと思いつつ放置していても、結局こういう所でぶち当たるのね、クォータニオン…

というわけで、クォータニオンを使用して書き直したのがこちら。
ターゲットは、Quaternion.Euler(Vector3)で指定して、現在のクォータニオンを rotation で取得。
さらには、Quaternion.Angleで2つのクォータニオンの間の角度を求めることが出来るので
このAngleの値が指定の幅以下になったら目標地点に来た扱いにして、処理を止めてあげればOKっぽいです。

この手の細かい挙動がいまいちつかみ切れてなくて、些細なことで躓いてます…うーん、難しい。
これの前には時間の扱い(固定FPSだとおもったら可変だから、 Time.deltaTime使わないとNG)だったり…

しばらくはこんな感じで わかんねええええええええええうああああああああああ ってなってそうですが
わからなくてやきもきしつつ調べものするのは好きなので、とても楽しいです。はい。

参考

コメントを残す

メールアドレスが公開されることはありません。

*