先ほどのサンプルを動かしてみて、ちょっと違和感を覚えた人もいるのではないでしょうか。
Add Actor Local OffsetでX方向に移動し、
Add Actor Local Rotationで3方向すべてに回転する。これを実行したら、「アクタが回転しながらX軸の方向へまっすぐ進んでいく」といった動きを想像した人も多いはずです。
ところが実行してみると、回転はするのですが、まっすぐは進まず、ゆっくりとゆるやかな楕円を描くようにして移動していきます。なんでこんな不思議な動きになるんだ?と疑問に感じたはずです。
実は、
Add Actor Local Offset/Rotationは、「アクタ自身から見た動き」を指定するものなのです。
Add Actor Local OffsetでXを10に設定したのは、「アクタから見てXの方向(前)に10だけ移動する」ということになります。ということは、アクアの向きが変われば、進む方向も変わるということです。
先ほどのサンプルでは、回転しながら移動をしていました。回転により、絶えずアクタの向きが変化していたため、進む方向もリアルタイムに変わってしまったのです。そのため円を描くような軌跡になってしまったのです。
■ワールド座標からみた移動
では、「回転しながら、指定の方向に真っ直ぐ進む」にはどうすればいいのか。それは、「
ローカル座標」ではなく、「
ワールド座標」を元に移動するノードを使えばいいのです。
「
ローカル座標」というのは、自分自身から見た座標軸のことです。例えば
Add Actor Local Offset/Rotationは、自分自身(操作するアクタ自身)から見た方向に移動しました。これに対し、その3D空間全体を基準とする、絶対軸による座標を「
ワールド座標」といいます。このワールド座標から見て、「こっちに移動」とすれば、動かすアクタの向きがどうなっていようが指定の方向に移動できます。
ワールド座標を基準に移動・回転をするノードは、「
Add Actor World Offset」「
Add Actor World Rotation」というものとして用意されています。名前を見ればわかるように、「
Local」が「
World」に変わっただけです。後は入出力項目などもまったく同じです。
試しに、先ほどのプログラムで、「
Add Actor Local Offset」を、「
Add Actor World Offset」に入れ替えてみてください。ノードの設定や接続などは全く同じにしておき、ただノードが入れ替えられただけにしましょう。そして実行すると、今度はX軸方向にまっすぐ進みながら回転するようになります。