こんにちは、なっつーです。
(この記事はUE4.15.1時点での内容です。)
VR内で視線入力を使うことはないでしょうか?
見てる方向のオブジェクトをターゲットしたいときなどあるかと思います。
UE4で視線入力と言えば、LineTraceを使いそうですが、
遠くの物や小さい物をターゲットするのが難しいので、
より快適に操作するために、SphereTracew使用します。
VRカメラの視野角は、OculusRiftCV1の場合、
左右が約40°、上下が約45°あります。
※視線中央から5°毎にキューブを配置した様子
SphereTraceを使うことで、カメラの視野角に対して、
下図のような範囲でのトレースを行うことができます。
今回は、VirtualRealityのテンプレートを使用します。
BP_PickupCube(画像の青いキューブ)をターゲットにする対象とします。
まず、視線入力を受けたときの関数をブループリントインターフェースで作成します。
テンプレートに既存のPickupActorInterfaceを編集し、
LockOn関数を作成します。
次に、BP_PickupCubeのイベントグラフに下記のように、
Targetされているときだけマテリアルを変更するノードを組みます。
最後にMotionControllerPawnにてトレース部分のノードを組みます。
SphereTraceだと、一番近い位置のオブジェクトがターゲットされてしまうため、
MultiSphereTraceを使用します。
複数トレースヒットした場合は、一番中心にあるものがターゲットされるように、
カメラの向きと方向ベクトルの差を計算し、一番小さいものを選んでます。
これでVRプレビューすると、トレースヒットしているポイントが赤四角で、
ターゲットされているオブジェクトは灰色に変化してます。
このようにカメラ中心(画面上だと右上に寄っているが、VR内だと真ん中に表示されている)に
一番近いオブジェクトを選択することができます。
おまけ
上記の方法だと距離が遠くなったときに、視野角に対してトレースできる範囲が狭くなります。
コーン状にトレースできるノードがあればいいのですが、そういうものはないようで、
下記のように、いくつかのトレース範囲に分けて、
第1トレースでヒットしなければ、第2トレース開始、
第2トレースでヒットしなければ、第3トレース開始・・というようにすればいいかもしれません。
コメントを残す