【UE4】キャラの上に名前を表示する

今回は、ネットゲームなどでよくある、アクターの上にキャラ名を表示したいと思います。

この仕組みを使えば、キャラの上にHPゲージも表示できるようにできます。

目次

今回作りたいもの

先に完成物を紹介します。

一番手前のアクターのキャラ名は表示されていませんが、これはカメラが近づきすぎると表示されないようになっています。

また、距離に応じてスケールを1.0~2,0に変動するようになっています。

スケールを弄る理由は、少し離れると文字が小さくなり見えなくなってしまうからです。

障害物がある場合は、ちゃんと名前が隠れるようにします。

ウィジェットブループリントの作成

まずは、キャラクターの上に表示するウィジェットブループリントを作成します。

コンテンツブラウザで右クリックして、ウィジェットブループリントを作成します。

パレットウィンドウの一般から、テキストを配置します。

文字の色・書体などはお好みに修正してください。

アンカーは中央にしておきます。

このテキストの文字は、キャラクターブループリント側で修正をかけるので、バインドを作成しておきます。

Return Valueから線を引っ張って、変数に昇格で変数を作成しておきます。Return Valueから線を引っ張って、変数に昇格で変数を作成しておきます。

キャラクターブループリントの修正

以下の記事で作成したキャラクターのブループリントを修正していきます。

あわせて読みたい
【UE4】Aボタンを押して、キャラに話しかける これまで、メッセージダイアログとキャラクターの配置を行ったので、次はこのキャラクターに対してAボタンを押したら会話ができるようにしていきたいと思います。 http...

コンポーネントを追加から、「Widget」を追加します。今回はWidgetの名前を「NamePlate」にしました。

追加したWidgetの詳細画面のユーザーインターフェースから、Widget Classを変更します。

作成したブループリントウィジェットを選べばOKです。

ビューポートにウィジェットが表示されますので、位置を調整します。

これで、頭の上に表示されるようになります。

表示名を変更する

次に、キャラクターブループリントを修正して、表示名を変更します。

イベント BeginPlayに上記のブループリントを作成します。

NamePlateの変数を変更して、表示名を変更します。

今回は、Nameという変数を作って、そこのデフォルト値を代入しています。

ここまで作成すると、このようになります。

大きさは動的に変わりませんし、表示名もキャラクターの向きに垂直に表示されます。

向きと大きさを調整する

tickを使って、キャラ名の向きと大きさをカメラの位置によって変動させます。

近づくと表示が消える、距離によって文字サイズが変わる、カメラの方に表示を向ける という3つの処理が入っているので、少々複雑に見えてしまいます。

しかし、よくよく見ると、使っているのはSetVisibilityとSetWorldTransformの2つだけです。

SetVisibilityは、NamePlateを表示・非表示を設定しているだけです。

要するに一定距離内であれば非表示、一定距離から離れたら表示を設定しています。

SetWorldTransfromは、NamePlateのRotation(向き)とScale(大きさ)を変更しています。

Rotation(向き)は、カメラの方を向かせるように、Find Look at Rotationを使っています。

Scale(大きさ)は、カメラの位置とNamePlateの距離を測定し、一定のサイズになるように調整しています。

複雑そうに見えますが、SetWorldTransformの引数を計算するためのノードが多数あるだけで、1つ1つ見て行けば、何をしているのかわかるかと思います。

まとめ

今回は、キャラクターの上に名前の表示を行いました。

色々とネットで調べてみたのですが、思うようにいかず苦戦しましたが、やっと形になりました。

これを応用すれば、敵キャラクターの上にHPのバーを出せるかと思います。

目次