|
執筆バージョン: Unreal Engine 5.7
|
こんにちは。
今回はキャラクターから見てカメラが左右どちらにいるかを判定する方法をご紹介いたします。
本記事ではキャラクターに絞って解説しておりますが実装自体は汎用的なもののため、
オブジェクトAからみたオブジェクトBの相対方向を調べるといった際にも役立つかと思います。
実装
まず、カメラが付随するキャラクターを用意します。
今回はコンテンツパックのThirdPersonにあるBP_ThirdPersonCharacterを複製して使用します。

複製したBPで新しく「IsCameraOnLeft」という関数を作成し、下図のように処理を実装します。(解説は後述)
引数はどちらもSceneComponentのオブジェクトリファレンスです。
また、関数はPure関数にします。

TickイベントでIsCameraOnLeft関数の実行結果を表示します。
IsCameraOnLeft関数の引数Target ComponentにはCapsule Componentを、Camera ComponentにはFollowCameraを渡します。
キャラクターの左側にカメラがある場合にTrueが返されます。

実行すると正常に動作していることが確認できます。
解説
IsCameraOnLeft関数の処理を要約すると、
キャラクターを左右に分割する面を作成し、
その面に対してキャラクターからカメラを結ぶ直線が交差するか、を判定しています。

①キャラクターの位置に右方向の正規ベクトルを足すことで直線の開始点をずらし、常に交差してしまうのを回避しています。
②キャラクターの位置からキャラクターの右側に面を向ける平面を作成しています。
③「Line Plane Intersection」は直線と平面の交点を計算するノードです。
今回は交点が存在するかのBool値だけを使用しています。
このノードに①とカメラの位置と②を渡すことで判定が行われます。
イメージしやすいように直線と平面を疑似的に可視化したものが以下になります。
おまけ
本記事では左右の判定を行っておりましたが、IsCameraOnLeft関数の「Get Right Vector」ノードを「Get Forward Vector」ノードに置き換えると前後の判定をすることが可能です。