20
18

More than 5 years have passed since last update.

UE4でHPゲージをモデルの頭上に表示しよう

Last updated at Posted at 2017-05-18

UE4でHPゲージをモデルの頭上に表示しよう

目標

アクションゲームの敵キャラの頭上に表示するようなHPゲージをUMGを使って表示してみましょう。

結果

SnapCrab_NoName_2017-5-18_8-33-59_No-00.jpg

環境

UnrealEngine 4.15.2

手順

1.ThirdPersonのサンプルを用意します。

2.敵キャラを用意するので、ThirdPersonCaracotrの子ブループリントを2つ作って、敵用とプレイヤー用を用意します。
SnapCrab_NoName_2017-5-17_22-27-22_No-00.jpg

2.GameModeのプレイヤーポーンをプレイヤー用のものに変更
  下記ブループリントはプレイヤー用のイベントに移動してしまいます。 
SnapCrab_NoName_2017-5-17_22-28-10_No-00.jpg

3.HPゲージをUMGで作成します。
 コンテンツブラウザの新規作成からヴィじっとブループリントを選択し、
SnapCrab_NoName_2017-5-18_8-51-21_No-00.png
 名前を適当に決めてダブルクリックで開いた後、
SnapCrab_NoName_2017-5-18_8-51-7_No-00.jpg
 プログレスバートテキストでHPバーの外観を作成します。
SnapCrab_NoName_2017-5-18_8-50-39_No-00.jpg

※アンカーはすべて左上にしてあります。

4.プログレスバーのゲージは関数にバインドして、変数としてThirdPersonCaracotrのリファレンスを追加、ThirdPersonCaractor側にもHPという名前でfloat型の変数を用意した後、下記のようにつなげておきます。

ゲージを関数にバインド
SnapCrab_NoName_2017-5-18_8-59-59_No-00.jpg

ThirdPersonCaractorに変数追加
SnapCrab_NoName_2017-5-18_9-3-6_No-00.jpg

ブループリントで紐づけ
SnapCrab_NoName_2017-5-18_9-4-53_No-00.jpg
(※1から変数を引いているのは黒カラーのバーが増えていくことでゲージが減っているように見せるためです。)

5.敵キャラを配置
ScreenShot00009.png

6.敵キャラのブループリントにUIのリファレンスを追加し、BiginPlayイベント(とDestroyedイベント)で下記のように設定しておきます。
SnapCrab_NoName_2017-5-18_23-20-50_No-00.jpg

(最後のAddtoViewportにターゲットをセットしないと表示されませんので注意しましょう)

7.UIゲージ側のブループリントを開き、ContructとTickに下記のように設定しましょう。

Contructイベント
SnapCrab_NoName_2017-5-18_23-23-48_No-00.jpg

Tickイベント
SnapCrab_NoName_2017-5-18_23-29-25_No-00.jpg

8.さて、これでひとまず頭の上にゲージが出るはずです。
 コンパイルして表示してみましょう。

ScreenShot00008.png

無事表示されました!

・・・おや?画面からキャラクターが消えるとゲージも消えてしまうようです。
SnapCrab_NoName_2017-5-18_23-39-2_No-00.jpg

SnapCrab_NoName_2017-5-18_23-39-12_No-00.jpg

一度画面外から外れるとTickイベントが来なくなってしまうようですね。

9.強制的にTickを回すために処理を関数化しましょう。

Tickからのつながりを外して、
SnapCrab_NoName_2017-5-18_23-43-6_No-00.jpg

選択部分を関数に折りたたみます。
SnapCrab_NoName_2017-5-18_23-44-27_No-00.jpg

10.関数化したので、必ず回っているはずの敵キャラのTickから呼び出せます。

こんな感じでしょうか
SnapCrab_NoName_2017-5-18_23-49-4_No-00.jpg

HPBarUIは手順6で作成したWidgitのリファレンスです。
こんなこともあろうかと保持していました。
(嘘です。後から追加しました。)

11.再度プレイしてみましょう。
はい、消えなくなりましたね。
SnapCrab_NoName_2017-5-18_23-57-45_No-00.jpg

でも、全部同じ大きさですね。
距離によってサイズの変化がないので違和感があります。

12.3D座標の2点をスクリーン座標に直したものをもとにサイズを調整する機能を入れましょう。
手を入れるべきはUI側のブループリントです。

頭上の点から適当量離れた2点をスクリーン座標に直します。
でてきたx座標の距離を係数で割ってスケール値に利用します。
SnapCrab_NoName_2017-5-19_0-4-29_No-00.jpg

一応、両方とも有効であることを確認して、SetRenderScale関数でWidget全体のスケールに入れます。
(スケール値は極端な値にならないようにClumpしておきます。)
SnapCrab_NoName_2017-5-19_0-4-46_No-00.jpg

13.再度プレイしてみましょう。
SnapCrab_NoName_2017-5-19_0-10-43_No-00.jpg

それっぽくなりました。
数値はマジックナンバーですが、そんなに厳密な計算が必要ではない箇所なので良しとしておきます。

14.(補足)壁の向こうでもゲージが見えていたので見えなくしました。

SnapCrab_NoName_2017-5-19_0-13-57_No-00.jpg
位置がバレバレで台無しにならないように、
SnapCrab_NoName_2017-5-19_0-17-41_No-00.jpg
関数の頭でWasRecentlyRenderd関数でチェックしてやれば、
SnapCrab_NoName_2017-5-19_0-15-6_No-00.jpg
ひとまず、アクターがすべて隠れているときにはゲージも表示されなくなります。(対応として最適ではないですが、煩わしさは若干減るでしょう。)

パッケージ

参考Webページ

◇UMGの3D位置変換や表示について
https://gameprogrammemo.tumblr.com/post/126581883062/umg%E3%81%AEui%E3%82%923d%E3%82%AD%E3%83%A3%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E9%A0%AD%E4%B8%8A%E3%81%AB%E8%A1%A8%E7%A4%BA-ue4study

◇カメラに映るアクターについて
https://answers.unrealengine.com/questions/499508/%E3%82%A2%E3%82%AF%E3%82%BF%E3%83%BC%E3%81%8B%E3%82%AB%E3%83%A1%E3%83%A9%E3%81%AB%E6%98%A0%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%82%92%E5%88%A4%E5%88%A5%E3%81%97%E3%81%9F%E3%81%84.html

20
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18