目次
はじめに
前回の続きです。
以前同じような内容の記事を書いているのでこちらと似たような実装になります。
ただしAp●x風になるよう多少変更を加えています。
▼この記事でできること

解説
①アイテムウィジェットの作成
ウィジェットブループリントを作成しWBP_Itemという名前を付けました。

imageを組み合わせてAp●x風のUIを作成します。
選択しているものはIsVariableにチェックをいれます。

レイアウトが崩れないようにSizeBoxでWidth/HeightOverrideを100×100にしています。
画像を適応してみて問題ないか確認します。

②アイテムスロットウィジェットの作成
Inventoryに位置をスロットとして保持するためのウィジェットWBP_ItemSlotを作ります。

背景とNameSlotを持つウィジェットです

③WBP_Inventoryの配置範囲の確認
WBP_Inventoryを開きGridPanelを追加します。
GridPanelの子に先ほど作成したWBP_ItemSlotを配置します。
GridPanelをアイテムスロットを覆うように配置し、フィル・ルールからアイコンが占めるを割合を計算できます。
スロットの番号がアイテムが追加される順番なので注意しましょう。

④WBP_Itemに情報をセットする
WBP_Itemを開きます。
拾ったアイテム情報からUIに表示する関数SetItemUIを作成しましょう。

ItemInfoの構造体からアイコンと個数をセットします。
1個しかない場合は文字を表示しないように条件分岐を入れています。

⑤WBP_Inventoryにイベントの作成
WBP_Inventoryのイベントグラフを開きます。
管理しやすいようにItemSlotの配列を作成しておきます。

スロットの数だけItemウィジェットを作成して配列化しておきます。

メモリ上には存在しますが表示はされません。
あとは作成したUIの情報を書き換えてスロットに登録を行うカスタムイベントAddSingleItemDataを作ります。

これでインベントリ側の準備は完了です。
⑥BP_FirstPersonCharacterにアイテム配列の作成
プレイヤーにアイテム情報を保持できるようにしましょう。
BP_FirstPersonCharacterを開きます。
ItemDataの配列を用意します。

現在スロットが16個あるのでデフォルト値に0から15個分作成します。

⑦スロット確認用の関数の実装
アイテムを拾う時にアイテム配列に空きがあるかチェックして拾えるか?また、拾える場合は何番目のスロットに入れられるかを確認する関数CheckAddInventoryItemを作成します。

何もアイテムがない場合のデフォルト値の説明文がNOTSetUpなのを利用して判定します。

引数はないので純粋にチェックを入れます。

イベントグラフに戻ります。
カテゴリーから分岐し作成した関数でチェック。
所有できる場合はUI情報を更新し、ItemDataの配列に登録します。

WBP_Inventoryはタブを押さないと生成されないため、事前に生成されるようにBeginPlayにチェックを外したInventoryControl関数を追加します。

実行してみましょう!
アイテムがUIに表示されれば成功です。

次回はドロップを実装したい(願望)
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。