BLOGブログ

2014.06.24UE4UE/ HUD

[UE4] HUDからActorの3D座標を利用する方法

改訂バージョン: Unreal Engine 4.19

例えばシューティングゲームのロックオンマーカーのように、3D空間上に存在するオブジェクトに重ねてHUDを表示したいことがあります。

今回は、3D座標を2D画面上の座標に変換し、HUDに利用する方法をご紹介します。

UE4のHUDを初めて触る方は、HUD入門の記事も合わせてご覧下さい。

UMGを用いる実装についてはActorの3D座標位置にWidgetを表示する方法も合わせてご覧ください。

 

1.3Dオブジェクトの画面上の座標を取得する

いきなり結論ですが、HUDの「Project」 というノードを使えば、3D座標を画面上の2D座標に変換することが出来ます。

 

次の例では、プレイヤーキャラの頭上に X の文字が付いてきます。

 

「Get Player Pawn」でプレイヤーキャラを取得し、「Get Actor Location」で、その3D座標を取得します。

「Project」で2D座標に変換し、「Break Vector」で値をバラしてテキスト表示の座標に使用します。

ここで取得した座標はキャラの基準座標(青いおっさんの場合は体の中心)なので、頭上にくるように少しずらしています。

(本当は骨の位置などを取得して、正確な位置に合わせた方がよいです)

 

これを利用すれば、ロックオンした敵にマーカーを表示したり、目標物へのガイドをHUDに表示したり、といった機能を実現することが出来ます。

但し、「Project」は、HUDの「Event Receive Draw HUD」の呼び出し中にしか使用出来ません。

それ以外のタイミングで使おうとしても、(0, 0, 0)が返ってくるだけになってしまうので、注意して下さい。

他のタイミングで同じようなコトをしたければ、残念ながら、自力で計算するしかないようです。。。