ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【UE4】インターフェースを使って視線をあわせたらアイテム名を出してみる!

はじめに

今回はタイトル通り、視線を合わせたアイテムの名前を出してみたいと思います。

 

インターフェースを使うことでキャラクターブループリントに対象の参照を疎にすることができる非常に強力な機能です。

 

丁寧に解説しているので少し長いですがよろしくお願いします。

f:id:namiton:20220201195053g:plain

それでは、いってみよう!!

やりかた

①親アイテムの作成とインターフェースの実装

コンテンツ右クリックからブループリントを選び、

アクターを継承したブループリントを作成します。

名前はBP_ItemBaseとします。

 

コンポーネントを追加からStaticMeshを選択し、

f:id:namiton:20220201180709p:plain

1M_Cubeなど任意のメッシュをセットしておきます。

f:id:namiton:20220201180825p:plain

変数を追加。名前をItemNameとして、型はStringにします。

f:id:namiton:20220201181012p:plain



次にインターフェースをつくります。

コンテンツ右クリックブループリントからインターフェースを選びましょう。

名前はIF_ShowItemNameとします。

f:id:namiton:20220201181133p:plain

 

作成したインターフェースを開き、

ShowItemNameを作成しましょう。

またアウトプットにString型でreturnNameを設定しておきます。

f:id:namiton:20220201182155p:plain

 

先ほど作成したBP_ItemBaseを開き、クラス設定のインターフェースから作成したものを割り当てましょう。

f:id:namiton:20220201181554p:plain


インターフェースを割り当てたら、インターフェースの欄に作成した関数が表示されるので作成したItemNameを返すようにします。

f:id:namiton:20220201182418p:plain

以上で親クラスの設定は終わりです。

 

②アイテムを作ろう

コンテンツからBP_ItemBaseを右クリックして子ブループリントを3つ作成します。

f:id:namiton:20220201182705p:plain

作成したら名前を

BP_Item_Cube

BP_Item_Cylinder

BP_ItemBase_Cone

に変更し、メッシュを割り当てます。

f:id:namiton:20220201183123p:plain

また、それぞれ開きクラスのデフォルトを押すと

詳細の欄にItemNameを設定できます。

3種類にアイテムの名前を付けましょう。

f:id:namiton:20220201183317p:plain

できたら、作成した3つアイテムをマップに配置しましょう!

f:id:namiton:20220201183649p:plain

③プレイヤーに表示できるようにする

今回はFirstPersonCharacterに実装しますがTPSでもできます。

 

BeginPlayに以下のように組みます。

これでCheckItemイベントが0.1秒おきに呼ばれます。

この時間を長くすれば呼ばれる頻度が下がるため

パフォーマンスに応じた

f:id:namiton:20220201183949p:plain

 

CheckItemではこのように組みます。

Float型の変数TraceDistanceを作成し距離を1000.0に設定します。

f:id:namiton:20220201184102p:plain

 

一度実行してみているところにトレースができているか確認しましょう!

f:id:namiton:20220201184301p:plain

表示されたらDraw Debug TypeをNoneに戻しましょう。

 

以下のようにノードを組みます。

String型のDisplayItemNameを作成しておきましょう。

f:id:namiton:20220201184758p:plain

 

ちゃんと動作するかデバックしておきましょう。

以下のノードを追加してみましょう。

f:id:namiton:20220201185034p:plain

 

アイテムに合わせるとログがアイテムの名前を返していたら成功です!

f:id:namiton:20220201185109p:plain

 

ウィジェットに名前を出力する。

コンテンツ右クリックからウィジェットブループリントを作成しましょう。

名前をWBP_ItemHudにします。

f:id:namiton:20220201185433p:plain

 

作成したWBP_ItemHudを開きパレットからTextを配置しましょう。

f:id:namiton:20220201185636p:plain

 

お好みの位置に配置しましょう。

次にコンテンツTextの右にあるバインディングを作成を押します。

f:id:namiton:20220201190135p:plain

 

関数名を変更し、String型の変数ItemNameを作り

以下のように組みます。

f:id:namiton:20220201193053p:plain

 

FirstPersonCharacterを開き、以下のように組みます。

f:id:namiton:20220201193429p:plain

 

最後にデバック用のノードを削除し以下のように変更します。

f:id:namiton:20220201193632p:plain

 

実行して確認してみましょう!

f:id:namiton:20220201195118g:plain



WBP_ItemHudで文字の色や大きさ、

FirstPersonCharacterのTraceDistanceで反応距離

を変更できます。

また、インターフェース経由でより多くの情報(アイテムの説明や表示色などなど)

を渡してあげるさらに多くの表示ができるので

お好みでカスタマイズしてみてくださいね。

さいごに

いかがだったでしょうか。

多少長くなってしまいましたが開発の参考になればうれしいです。

不明点やアドバイスなどありましたら、コメントしていただけると可能な限りお答えいたしますので遠慮なく記載してください。

 

 

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。