プレイヤー(自身)と最も近い敵にアイコン(UMG)を表示させる方法!
プレイヤー(自身)と最も近い敵に
アイコン(UMG)を表示させる方法!
を今回は紹介します。
↓最終的な出来としては以下のようになります。
※サードパーソンテンプレートを使用します
~敵の作成~
コンテンツフォルダ>ThirdPersonBP>Blueprintフォルダの中にある
「ThirdPersonCharacter」をコピーし、
コピーしたやつに「Enemy」という名前を付けます。
~BPインターフェースの作成~
「MyInterface」という名前のBPインターフェースを作成。
「MyInterface」開き
「SetUMGVisibilityBPI」という名のインターフェースを作成します。
インプット
~ThirdPersonCharacterにコンポーネントを追加~
「ThirdPersonCharacter」を開きます。
SphereRadiusを「225」にします。
~変数の作成~
デフォルト値の編集は特に無し。
~イベントグラフの作成~
オーバーラップイベントを使います。
Beginオーバーラップイベントです。
オーバーラップしたアクターがタグ持ちだった場合、配列に加える処理です。
配列に加えた後、タイマーイベントを開始しています。
このタイマーイベントは、自身に最も近い敵を算出する為のイベント「FindClosestEnemy」を、指定秒数間隔で呼び出しています。
「ActorIsValid」は自作マクロです。
中身はこうです。
Endオーバーラップイベントです。
タイマーで呼び出せれているイベント
「FindClosestEnemy」の処理を作成します。
カスタムイベント「FindClosestEnemy」が呼び出された時
オーバーラップしたアクターが格納されてる配列「OverlapEnemys」に
「1つ」以上アクターが格納されていればTrue。
自身の位置とSphereコンポーネントのRadiusを変数に格納
ループ処理を行います。
↓LoopBodyに繋がる処理です。
トレース処理
自身と敵の距離を測定
トレースがヒットした時
自身と敵との距離を変数に格納します。
そして、ForEachLoopの「ArrayElement」を変数「TempFrontEnemy」に格納します。
↓Compleateに繋がる処理です。
ここはもうちょっと上手くコメントを書いて、説明したかったのですが
個人的にここの説明はなかなか難しかったので
単純に「AとBが不一致ならTrue」という雑な説明になってます。すいません・・・。
インプット値のVisibilityがFalseになってるインターフェースのターゲットを変数「Enemy」と繋げる。
Trueになってる方のターゲットは、変数「TempFrontEnemy」と繋げる。
変数「TempFrontEnemy」を変数「Enemy」にセット。
その後、変数「TempFrontEnemy」を空にする。
これでThirdPersonCharacterの編集は終わりです。
~アイコン(UMG)の作成~
「Takedown」という名のUMGを作成。
「Takedown」UMGの中身はこんな感じです。
正直各パネルの使い方がこれで正しいかどうかは分かりませんw
UMGは滅法詳しくないので。
Overlayの使い方もこれでいいのかさっぱりw
SizeBoxの詳細パネル
Textの詳細パネル
UMGはこれで終わりです。(適当)
~敵にコンポーネントを追加~
「Enemy」を開きます。
「Space」を「Screen」にします。
「WidgetClass」を作成したUMG「Takedown」にします。
~イベントグラフ~
非常に単純です。
ThirdPersonCharacterから
「SetUMGVisibilityBPI」イベントが呼び出された時
これで完了です。
これで、一番最初にお見せした動画のようになるはずです。
それではまた!^^ノシ