タイトル: Overlapした位置の座標を取得する方法
SEOタイトル: UE5でOverlapした位置の座標を取得する方法
Unreal Engine 5(UE5)でアクターやコンポーネント同士が接触(Overlap)した際、その接触した地点の座標を取得したい場面は多々あります。例えば、エフェクトを出す場所を正確にしたい、UIに重なった位置を示したい、またはロジックに反映させたいといった場合です。
しかし、Overlapイベントでは、Hitイベントのように明確な衝突点(Impact Point)が提供されないため、別のアプローチが必要です。本記事では、その解決方法について詳しく解説します。
Overlapイベントでは位置情報が含まれない?
Blueprintの「OnComponentBeginOverlap」や「OnActorBeginOverlap」では、イベントの出力ピンには他のアクターやコンポーネントの情報は含まれていますが、Overlapした正確なワールド座標は含まれていません。
そのため、以下のような工夫が必要になります。
方法1:自分と相手の位置の中間点を使う
最もシンプルな方法は、自アクターの座標と相手アクターの座標の平均を使うことです。
Blueprintでは以下のように実装できます:
- 「OnComponentBeginOverlap」イベントを使用
- 「GetWorldLocation」で自分と相手の位置を取得
- 「(A + B) / 2」で中間点を計算
この方法は簡単ですが、精度に限界があります。特にコンポーネントサイズが大きい場合、中心点が実際の接触点とは異なることがあります。
方法2:カスタムでTraceを使って補完する
Overlap直後に、Line Traceを使って接触点を推定する方法です。
例えば、Overlapイベントで相手のアクターが取得できたら、以下のような処理を行います:
- 自分の位置から相手の位置へLine Traceを実行
- 最初にHitした位置を取得
この方法により、物理的な接触点により近い座標を取得できます。
方法3:Overlapの範囲内で最も近い点を算出する
Overlap対象が複数ある場合、単純な中間点ではなく、「Closest Point on Collision」関数を利用する方法もあります。
これは、対象のPrimitiveComponentに対して使用でき、任意の座標に最も近いサーフェス上の点を返します。
手順:
- 「Get Closest Point on Collision」ノードを使用
- Targetに相手のコリジョンコンポーネント
- Locationには自分の座標
- 出力のLocationが接触点に近い推定位置
方法4:OverlapコンポーネントにSocketを使う
もし接触位置がある程度固定されている場合は、Socket(ソケット)やScene Componentを使ってOverlap位置の目安を事前に仕込むことも可能です。
接触時に「GetSocketLocation」などを使えば、決まった接触座標を再現できます。これは主に仕掛けやパズル系ゲームで使われる方法です。
補足:複数コンポーネントとのOverlapがある場合
Overlap対象が複数存在する可能性がある場合は、For Each Loopを使って、それぞれの相手コンポーネントとの位置を計算・記録しておくと良いでしょう。
また、Overlap中に随時位置情報が変わる場合は、「OnComponentBeginOverlap」だけでなく、「Tick」内での更新も検討するとより正確です。
まとめ
UE5ではOverlapイベント単体では正確な座標情報を得ることはできませんが、中間点の計算やLine Trace、Closest Pointなどの手法を組み合わせることで、実用的な位置取得が可能になります。
目的や精度、パフォーマンス要件に応じて最適な方法を選び、Overlapイベントをより賢く活用していきましょう。