はじめに
今回はタイトル通り、視線を合わせたアイテムの名前を出してみたいと思います。
インターフェースを使うことでキャラクターブループリントに対象の参照を疎にすることができる非常に強力な機能です。
丁寧に解説しているので少し長いですがよろしくお願いします。
それでは、いってみよう!!
やりかた
①親アイテムの作成とインターフェースの実装
コンテンツ右クリックからブループリントを選び、
アクターを継承したブループリントを作成します。
名前はBP_ItemBaseとします。
コンポーネントを追加からStaticMeshを選択し、
1M_Cubeなど任意のメッシュをセットしておきます。
変数を追加。名前をItemNameとして、型はStringにします。
次にインターフェースをつくります。
コンテンツ右クリックブループリントからインターフェースを選びましょう。
名前はIF_ShowItemNameとします。
作成したインターフェースを開き、
ShowItemNameを作成しましょう。
またアウトプットにString型でreturnNameを設定しておきます。
先ほど作成したBP_ItemBaseを開き、クラス設定のインターフェースから作成したものを割り当てましょう。
インターフェースを割り当てたら、インターフェースの欄に作成した関数が表示されるので作成したItemNameを返すようにします。
以上で親クラスの設定は終わりです。
②アイテムを作ろう
コンテンツからBP_ItemBaseを右クリックして子ブループリントを3つ作成します。
作成したら名前を
BP_Item_Cube
BP_Item_Cylinder
BP_ItemBase_Cone
に変更し、メッシュを割り当てます。
また、それぞれ開きクラスのデフォルトを押すと
詳細の欄にItemNameを設定できます。
3種類にアイテムの名前を付けましょう。
できたら、作成した3つアイテムをマップに配置しましょう!
③プレイヤーに表示できるようにする
今回はFirstPersonCharacterに実装しますがTPSでもできます。
BeginPlayに以下のように組みます。
これでCheckItemイベントが0.1秒おきに呼ばれます。
この時間を長くすれば呼ばれる頻度が下がるため
パフォーマンスに応じた
CheckItemではこのように組みます。
Float型の変数TraceDistanceを作成し距離を1000.0に設定します。
一度実行してみているところにトレースができているか確認しましょう!
表示されたらDraw Debug TypeをNoneに戻しましょう。
以下のようにノードを組みます。
String型のDisplayItemNameを作成しておきましょう。
ちゃんと動作するかデバックしておきましょう。
以下のノードを追加してみましょう。
アイテムに合わせるとログがアイテムの名前を返していたら成功です!
④ウィジェットに名前を出力する。
コンテンツ右クリックからウィジェットブループリントを作成しましょう。
名前をWBP_ItemHudにします。
作成したWBP_ItemHudを開きパレットからTextを配置しましょう。
お好みの位置に配置しましょう。
次にコンテンツTextの右にあるバインディングを作成を押します。
関数名を変更し、String型の変数ItemNameを作り
以下のように組みます。
FirstPersonCharacterを開き、以下のように組みます。
最後にデバック用のノードを削除し以下のように変更します。
実行して確認してみましょう!
WBP_ItemHudで文字の色や大きさ、
FirstPersonCharacterのTraceDistanceで反応距離
を変更できます。
また、インターフェース経由でより多くの情報(アイテムの説明や表示色などなど)
を渡してあげるさらに多くの表示ができるので
お好みでカスタマイズしてみてくださいね。
さいごに
いかがだったでしょうか。
多少長くなってしまいましたが開発の参考になればうれしいです。
不明点やアドバイスなどありましたら、コメントしていただけると可能な限りお答えいたしますので遠慮なく記載してください。
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。