普段3Dで同人ゲームを作っているにーあいです。
3Dで作ってるのは純粋にそっちの方が簡単だからです。2Dって難しくないですか?
BlueprintでActorを回転させたい
まず始めに、今回の話は基本的に検索すれば出ます。
新規性も特にないので単に備忘録です。
みなさんはゲームを作っていて、Editor上で配置したオブジェクトってどうやって回転させてますか?
普通はGizmoでくるくるするか、Editorのトランスフォームをいじいじすると思います。
Editorで回転させるにしても、Gizmoがそうであるように3つのパラメーターで実現可能になってます。
さて、BlueprintでActorを回転させようと思えばこのノードを使いますよね
回転はやはりパラメータ三つであらわせるようですが、Vector3とは違ってRotation型の入力になっています。
基本的に用意する値は三つなのでVector3です。じゃけんRotatorに変換しましょうねって検索かけると、見たこともない変換ノードがいっぱい出てきてしまうから困ります。
そして、ほんの少し試した中だとfromXとfromZで変換すれば、Actorはそんなわけない角度でくるくる回るようになります。
しかし、正解はこのいずれでもなくMakeRotatorなのです。
※MakeRotノードの全てを調べたわけではないので、この中にはもしかするとこれと同じような動作をするものがあるかもしれません。
MakeRotatorであれば、Editor上と同じ値を渡せばEditorと同じ回転の状態が得られます。
この方法でのデメリット(クォータニオンが本当はいいらしいって話)
一応、このままだと本当に価値のない備忘録になってしまうので、回転にまつわるちょっとした話を書き残しておきます。私自身このあたりの話を完全に理解しているわけではないので間違いも多くあると思います。
皆さんはクォータニオン(Quaternion)って聞いたことがありますか。
私のように一度Unityを触ったことがあるとか、姿勢制御系やってる人とか、回転にまつわる話とかをする際には出てくる言葉です。
正直、クォータニオンってよくわかんないし面倒ですよねって言ったらたぶん数学屋さんには怒られます。実際有用の極みみたいなやつなので、虚数を既に学んだ人(中学生とかで学びましたっけ……?)ならちょっと足を延ばせば複素数とその発展としてちょろっとやってみる価値は大いにあります。
クォータニオンは、めちゃくちゃ大雑把な理解のために間違ったことを言うと、Vector4みたいなものです。
Quaterの名前から推察できる通り、クォータニオンは4つのパラメータを持つ値です。
そのx,y,z,wはそれぞれ(x,y,z)でその空間でのベクトル、wはそのベクトルを軸に回した時の回転量を意味しています。
実はものをくるくる回転させるとき、私たちがEditorでGizmoをくるくるするように3方向の値を弄らなくても、ある軸で回せば任意の回った状態が作れるのです。
そのため、クォータニオンがあればわざわざ3回回転の計算をしなくてもいいということになります。
これがクォータニオンを使うメリットで、計算量が減るという恩恵が得られます。つまりBlueprintいじってるときには大差ないように見えて、実際には処理が軽くなるということ。
念のため補足をしておくと、クォータニオンの回転は複素数の掛け算が回転に関係していたあれをさらに発展させた感じなので、そこを意識しながら調べるとわかりやすいかもしれません。
……と、とりあえずクォータニオンの宣伝はしておきました。お目汚し失礼しました。
さいごに
でも、EventTickに突っ込むとかよほどのことがない限りはわかりやすさの方が大事だと思うので、これからも3軸でくるくるします