(UE4)オブジェクトをタッチ操作で360°回転(for Phone)
□参考にした動画
もし解釈を履き違えている部分がありましたら、ご指摘頂けると助かります…
前提
UE4プロジェクトをスマートフォンで実行、操作します。
事前準備
UE4:
スマートフォン:アプリUnreal Remote 2をインストール
概要
レベルに配置されたオブジェクトを、
タッチでグリグリ動かして360°観察できるシステムを組む。
作業環境
UE:4.26.1
OS:Windows10 pro
プロジェクト設定
Engine/inputでtouchと検索し、
use mouse for touchにチェックを入れましょう。
マウス操作の実装
レベルブループリントを開き、
新規ファンクションを作成します。
(ここでは名前をTouch Inputとします。)
○ファンクションの内容
以下のようなノードを組みましょう。
・Get Input Touch State
タッチされた座標のx,y値を取得できます。
タッチ位置をVector2Dで出力してくれるファンクションができました。
○イベントグラフの内容
○全体図
1.開始地点/終了地点の取得
つまり、指をつけた位置と離した位置の取得です。
Input Touchから、
Pressedが指をつけた瞬間、
Releasedが指を離した瞬間です。
これらをState Location/End Locationという変数に分け、
それぞれ格納します。
2.移動距離の算出
上記で取得した開始地点と終了地点から、
どれだけ指を動かしたか(どこで指を止めたか)計算します。
指を動かしている間はフレーム毎に結果を更新するため、
Get World Delta Secondsで取得した値と掛け算します。
さらにmove speedという変数を作り、
デフォルト値で感度を決め一緒に掛けます。
3.オブジェクトを回転
算出された移動距離をもとに、
オブジェクトに回転を追加します。
AddActorWorldRotationに
X→Yar
Y→Pitch
の値を入力しましょう。
yawはそのまま入力すると
なぜか逆になるので
float*floatで0.1をかけてから入力します。
以上で、全ての実装が完了しました。
ちなみに1.の手順の際、
説明上の都合でSet End Locationを
input touchのReleacedに繋ぎましたが、
これをMovedに繋いでおくとシームレスに回転します。
こちらの方がタッチ操作としてよりインタラクティブかと思います。
Discussion