(動画チュートリアル関連) Rotation をオフセットする意味は?

:arrow_forward:関連する動画チュートリアル
Blueprint Essentials – 7 – Blueprint Execution Order

この回の動画チュートリアルでは、キャラクターの向きを変えるとその方向名 (北、北東、東、南東、南、南西、西、北西) が表示されるブループリントを作っています。その際、下図のように 22.5 度を本来の回転 (角度) に足して本来の角度をずらしています (オフセットしています)。これはなぜでしょうか?

仮にオフセットしなかった場合を考えてみましょう。チュートリアルでは 45°ずつに分けてキャラクターが向いている角度に名前を付けています。 (キャラクターの向かっている角度を 45° で割り算してその商の整数部分に対して方向名を付けています)。具体的には次のようになるはずです。 (なお、N=北、NE=北東、以下同様です)。

たとえば、キャラクターが向かっている方向が 0° から 45° の範囲にある場合は、北になります。しかし、これは不自然です。なぜなら、たとえば 30°を向いている時は北なのに、359°を向いている時は北西になってしまうからです。普通は 0° を中心にしてその前後に同じ幅をもたせて北とするはずです。その時の「幅」が 22.5°になります。図にすると次のようになります。

上図では、グレイの線がたとえば北や南東の軸。グレイの軸を中心にした青の線で囲まれた部分が北や南東のゾーンです。チュートリアルでは、このゾーンを判定するグラフを組んでいることになります。

蛇足ながら、22.5°の計算過程をもう少し詳しく示すと、 360°÷8ゾーン = 45° 、つまり、1 ゾーン 45° であり、その 45° を 2 分割した 22.5 ° を軸の前後に置かれるようにしています。

なお、Rotation の Z は、地面と平行な平面上を回転する角度です。今回、必要になるのはこの Z の Rotation だけです。また、Combine Rotator の Combine とは「結びつける」という意味で、Combine Rotator は、Rotation (角度) を結びつける、つまり、足し合わせるための関数です。チュートリアルでは、入力ピン A には元になる Rotation (言い換えると、キャラクターが向かっている実際の Rotation の Z の値) を入れており、入力ピン B には、Z だけ加算されるように 22.5 が入っています。

さらに、チュートリアルのグラフに沿って、359° を例にとって考えてみます。

  • キャラクターが Z が 359° の方向に向いて立っている。
  • Get Actor Rotation ノードで、その 359° を含むベクタが取得される。
  • Combine Rotators ノードで、Z が 359° + 25.5°=384.5°=24.5° が計算される。
  • ÷ ノードで、24.5°÷45°=0.5444 が計算される。
  • Floor ノードで、0.5444 が 0 になる。(小数以下が切り捨てられる)
  • 配列のインデックスが 0 になる。

このように、22.5° を加えることによって、359° はもう北西ではなくなり、望みどおり北になりました。まとめると、キャラクターの向かっている方向に 22.5°を足すことによって、各方向の中心軸の前後 22.5° にゾーンができるようにしている、ということになります。

なお、この問題は、下記のフォーラムでも問題になっています。

:arrow_forward:関連するサイト

Unreal Engine Forums (What does Combine Rotators do?)

UE4 の学び部屋 (ブループリントの基本的な構成要素⑦ ブループリントの実行順序)