[Unreal Engine]
Actorの角度を0~360の範囲で取得したい

▼目的
ルーレットを作って、角度によって処理を分けたい。
そのために、ルーレットの角度を0~360度の範囲で取得したい。

▼問題
アクターの角度を取得するだけで簡単だと思ったら、
0~360度の範囲で角度を取得する事が出来ない。

ルーレットの針と、盤上に配置したオブジェクトで、
オーバーラップイベントを発生させようかとも思ったけど、
微妙な判定がやり難そう。
やっぱり角度を取得したい。

▼解決方法
ベクトルを2つ作り、ふたつのベクトル間の角度を求める。
内積と外積を使う。

▼シーンに用意するもの
・針(hari):ベクトルを取るためのオブジェクト

・円盤:7つのコンポーネントで構成
    つぶしたシリンダー1つ
    区切るためのボックス4つ、
    ベクトル取るためのマーカー2つ。

▼概要
hari、pivot_cone、marker_cone、
この3つを使って2つのベクトルを作り、正規化する。

この2つのベクトルから内積と外積を計算。

得た内積のアークコサインを求めると、0~180度の値を得られる。

外積と円盤のUp Vectorをdotノードにつなぐ。
出た値がプラスかマイナスかによって、回転の方向を求める。

取得した値がマイナスだったら360を足す。
これで0~360の範囲で角度を取得できる。

▼ノード
※無駄があるので注意。一個目の関数は不要。
UPベクトルと外積で求めたベクトルの内積がプラスかマイナスか判別して、
プラスなら360-角度にすれば良いだけ。

解説なし画像を見る

円盤のブループリント
・Tキーを押すと、2つのベクトル間の角度を計算して、Print
・Fキーを押すと、円盤を10度回転

▼関数の中身

・関数+or-
 入力値がマイナスなら-1を掛ける

・関数IF input is minus, add 360
 入力値がマイナスなら、入力値に360足す

▼もう少し詳しく解説
二つのベクトルがつくる角度を求める

▼参考リンク
Deriving angles from 0 to 360 from Dot Product.

2つのベクトルが作る角度について

広告

コメントを残す

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

スパム対策用の計算式と画像認証です。↓の欄を入力しないとコメントが出来ません。 *

*