ゲーム開発を試してみようと思い立ち、Unreal Engine 5をインストールして開発する過程で調べてみた部分を備忘録的に投稿します。アクションゲームに実装されている「インベントリ」を作成手順の続きです。今回でインベントリの空きスロットにアイテムを入れていく機能を追加します。
先回までの作業は、別記事をご覧ください。
簡単なインベントリの仕様
実際のゲームで実装されているインベントリは、複雑な機能が盛り込まれているので今回は簡単な実装になるようにしています。
先回までの作業でできている部分は、こんな感じです(黄色のアンダーライン部分)。
先回はアイテムの画像を保持するウィジェットを決め打ちしていたので、どのアイテムの画像も左端のスロットを変更していました。
今回からは実際にアイテムを取得したらインベントリ内の「空きスロット」に画像を追加する操作をしていきます。
アイテムスロットの配列化
空きスロットを取得するために、アイテムの画像を保持するウィジェット変数を配列化していきます。
1.[WP_Inventory]を開いて[イベントグラフ]画面の空いている場所でマウスの右クリックして表示された[このブループリントで使えるノード]画面で “Event On Initialized” を検索して追加します。
2. 追加された[Event On Initialized]ノードの実行ピンを伸ばして表示された[このブループリントで使えるノード]画面で “Make Array” を検索して追加します。
3.[Make Array]ノードが追加されます。
4.[Make Array]ノードの[ピンを追加]をクリックしてスロットの数分追加します。
5. 変数の覧から[Slot0]を[Make Array]ノードの[0]ピンにドラッグします。
6.[Make Array]ノードの[0]ピンに[Slot 0]ノードが接続されます。
7. 続けて[Slot1]~[Slot3]変数を[Make Array]ノードの各ピンにドラッグして接続します。
8.[Make Array]ノードの[Array]ピンを伸ばして表示された[WB_Inventory Slot オブジェクト参照の配列を取得する動作]画面の[Promote to variable]を選択して変数に昇格します。
9. [マイブループリント]画面に追加された[WB InventorySlot]型変数の名前を “Slots” に変更します。
10.[Slots]変数の[セット]ノードの実行ピンを伸ばして表示された[このブループリントで使えるノード]画面で “For Each Loop” を検索して追加します。
11. 追加された[For Each Loop]ノードの[Array]ピンと[Slots]変数の[セット]ノードの配列ピンを接続します。
12.[マイブループリント]画面で[Boolean]型の変数を “SlotState” として追加します。
13.[詳細]画面で[変数の型]一覧から[配列]に変更します。
14. 追加した[SlotState]変数を[イベントグラフ]にドラッグして表示されたポップアップメニューで[Get SlotState]を選択します。
15.[Slot State]ノードが追加されます。
16.[Slot State]ノードのピンを伸ばして表示された[Boolean の配列を取得する動作]画面で “Add” を検索して表示された[配列|Add]を追加します。
17. [For Each Loop]ノードの[Loop Body]ピンと追加された[ADD]ノードを接続します。
ここまでの作業で[WB_Inventory]の初期化部分で用意した変数分の状態を保持する[SlotState]変数の配列が作成されます。
空きスロットを取得する関数を作成
配列化した変数を使って空きスロットを取得する関数を追加します。
1.[マイブループリント]画面で[関数]の[+]をクリックして新規関数を追加します。
2. 追加された関数の名前を “FindEmptyInventorySlot” に変更します。
3. [詳細]画面で[アウトプット]の[+]をクリックして名前を “Index” に変更して型を[Integer]に設定します。
4.[マイブループリント]画面の[SlotState]変数を[イベントグラフ]にドラッグして表示されたポップアップメニューで[Get SlotState]を選択します。
5. 追加された[Slot State]ノードのピンを伸ばして表示された[Boolean の配列を取得する動作]画面で “For Each Loop with Break” を検索して追加します。
6.[For Each Loop with Break]ノードが追加されます。
7.[For Each Loop with Break]ノードの[Array Element]ピンを伸ばして表示された[Boolean を取得する動作]画面で “Branch” を検索して追加します。
8. [Branch]ノードの[False]ピンと[For Each Loop with Break]の[Break]ピンを接続します。
9. [For Each Loop with Break]ノードの[Loop Body]ピンと[Branch]ノードの実行ピンを接続します。
10.[For Each Loop with Break]ノードの[Complated]ピンに新しく[Branch]ノードを追加して[Array Element]ピンと[Condition]ピンを接続します。
[Return Node]ノードをコピーして[Branch]ノードの[True]ピンと[False]ピンのぞれぞれに接続し[True]側の[Index]ピンには “-1” を直接入力し[False]側の[Index]ピンには[For Each Loop with Break]ノードの[Array Index]ピンを接続します。
11.[詳細]画面の[純粋]にチェックを入れます。
ここまでの作業で、[SlotState]配列から空きスロットを取得する関数が出来上がります。
少し長くなってきたので、次回は作成した[FindEmptyInventorySlot]関数を呼び出してインベントリの空きスロットにアイテムの画像を追加する部分を追加する手順を紹介します。
まとめ
今回は長い手順になりましたが、Unreal Engineで配置したアイテムにキャラクターの持ち物として管理する「インベントリ」画面の空きスロットにアイテムを追加する機能を作る手順について書きました。
今回は、空きスロットを取得する関数と利用する配列を作成する部分の手順について紹介しました。
Unreal Engineのゲーム開発でアイテムを管理する[インベントリ]画面を表示させたい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。