妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

Rotatorに角度を足し算する② それでも強引に足し算する方法

f:id:una_unagi:20180510222637g:plain

imoue.hatenablog.com
imoue.hatenablog.com
昨日までの

「昨日はCombine Rotationsノードを使うことで、角度をちゃんと変化させる方法をやったけど、実はもう少しちゃんとしてない方法もある」

f:id:una_unagi:20180511233125p:plain

「こういう風にすると、普通に角度を足しても回転させることができる」

妹「これは何が違うの?」

「いったん現在の角度をRotator変数に保存して、それをSetActorRotationする。次のフレームも、GETする時は必ず変数からで、GetActorRotationは使わないようにすると、これはこれでちゃんと回転する。一昨日にやった、ロールとヨーが反転しちゃう問題は、どの時点で発生してるかっていうのが問題で」

妹「GetActorRotationした時?」

「実際にはSetActorRotationした時点かもしれないけど、どちらにしてもGetActorRotationした時点でそうなってることがわかる。そこで角度の正規化が行われて、ロールとかが反転しちゃう。でもRotator変数に保存しただけなら元の数字が残ってる。だから反転もしないし、720.0とか設定しても0に戻らない。そのままの数字。丁度エディタで角度のとこに数字を入れたのと同じような状態になってるはず」

妹「でも昨日のやつの方がラクチンのような」

「まあそうなんだけど、こういうやり方が必要なケースもあるかもしれない。角度の数字がプレイヤー側にも表示されてる場合とか。勝手に反転されたら気味悪いだろうし。あと変数はRotatorじゃなくVectorにした方が計算は楽。足し算ノードとか使えるから。SetActorRotationの時にそのVectorをつなげば自動で変換ノード出るし」

妹「Rotatorは足し算出来ないんだ……でもそうするとVectorとの違いっていったい」

「データ的にはたぶん同じ物なんだけど、これは角度のやつってしといた方が、わかりやすいんじゃないかな。うっかり違うのにつないだ場合も変換ノードで気づくし。足し算をさせないようにというのもその一環で」

妹「普通にfloatに分解して足してたから全然気付かなかった」