single.php

Unreal Engineで配置したアイテムを入れるインベントリを作成する方法(その2)

ゲーム開発を試してみようと思い立ち、Unreal Engine 5をインストールして開発する過程で調べてみた部分を備忘録的に投稿します。今回はアイテムを利用するゲームに必要になる「インベントリ」を作成する続きです。

先回までの作業は、別記事をご覧ください。

簡単なインベントリの仕様

詳細まで作りこむと、結構壮大なボリュームが必要なので簡単な実装になるように仕様を先に決めておきます。

画面の表示や操作関係は、こんな感じにしてみました。

ゲームで見かける「インベントリ」にはアイテムをドロップしたり、スロット間の移動や同じアイテムを1つの「スロット」にまとめるなど、複雑な機能があります。

話を分かりやすくするために必要最低限の動作にしました。

レベルに配置するアイテムを作成

ゲーム画面に配置してキャラクターに取得させるためのアイテムを作成していきます。

と言っても、最初から作成すると手順がかかるので、先回までに作成した[キャラクターが近づくとテキストとアウトラインが表示されるアイテム]で利用したブループリントクラスを流用します。

1. Actorを親クラスにしたブループリントクラス[BP_Item]を開いて[マイブループリント]画面の[変数]を追加します。

2. 追加された変数の名前を “SlotImage” に変更します。

3. 変数の型一覧から “Texture 2D” を検索して追加します。

4. 追加した[SlotImage]にインベントリに表示する画像を管理します。

インベントリに表示する画像の作成

表示させる画像は、画像形式であれば何でも良いんですが、今回は無料で利用できる[Infinity Blade: Weapons]のコンテンツを利用していきます。

コンテンツの内容を確認して[StaticMesh]で構成されている[StaffofAncients]と[BoneShardMace]の2種類をアイテムとして画像を作成しました。

例えば、[SM_Blunt_BoneShardMace]と[SM_Stf_StaffofAncients]を開きます。

スクリーンショットなどでプレビュー部分を画像形式で保存します。

保存した画像ファイルを[コンテンツドロワー]にドラッグしてインポートします。

キャラクターとアイテムの距離を判定

レベルに配置したアイテムとキャラクターの距離から取得の可否を判定する関数を作成します。

1.[コンテンツドロワー]画面で空いている場所でマウスを右クリックします。

2. 表示されたポップアップメニューで[ブループリント|ブループリントインターフェイス]を選択します。

3. 追加された[ブループリントインターフェイス]の名前を “BPI_Item” に変更します。

4.[BPI_Item]を開いて[マイブループリント]画面の[関数|新規関数]を選択します。

5. 関数の名前を “SetItemCollision” に変更します。

6.[インプット]の[+]をクリックして追加します。

7. 追加されたインプットの名前を “IsCollision” に変更します。

8.[BP_Item]を開いて[イベントグラフ]画面の[On Component Begin Overlap (Sphere)]ノードの[Other Actor]ピンを伸ばして表示された[このブループリントで使えるノード]画面で “Set Item Collision (Message)” を検索して追加します。

9. 追加された[Set Item Collision]ノードの[Is Collision]にチェックを入れます。

10.[On Component Begin Overlap (Sphere)]と[Branch]ノードの間に[Set Item Collision]ノードを挿入します。

11.[On Component End Overlap (Sphere)]も同じ様に[Set Item Collision]ノードを追加して[Branch]ノードの間に挿入します。([Is Collision]のチェックは外します)

コリジョン判定の確認

キャラクターとアイテムの取得可否を判定する[Is Collision]変数の動作チェックをしていきます。

1.[BP_ThirdPersonCharacter]を開きます。

2.[詳細]画面の[インターフェイス|実装インターフェイス]の[追加]プリダウンリストを開きます。

3. 表示された[インターフェイスを実装]画面で “BPI_Item” を検索して追加します。

4.[BPI_Item]が追加されます。

5.[イベントグラフ]の空いている場所で右クリックして表示された[このブループリントで使えるノード]画面で “Event Set Item Collision” を検索して追加します。

6. 追加された[Event Set Item Collision]の[Is Collision]ピンを伸ばして表示された[Booleanを取得する動作]画面で[Promote to variable]を選択します。

7. 追加された[セット]ノードと[Event Set Item Collision]の実行ピンを接続します。

8.[セット]ノードの実行ピンを伸ばして[Print String]ノードを追加します。表示する文字は、[Is Collision]の戻り値を設定します。

9. ここまでの作業を[コンパイル]して保存します。

アイテムを配置して確認

レベルに配置して[Is Collision]の動作確認をします。

1.[コンテンツドロワー]画面で[BP_Item]をレベルにドラッグします。

2. ゲームを開始して[BP_Item]を配置した場所にチャラクターを操作します。

3. 配置した場所に近づくと画面にデバッグ用の文字列が表示されます。

配置したアイテムに近づいた際に[true]、離れると[false]が表示されたら正常に動作しています。

次回はスタティックメッシュを設定したアイテムを使ってキャラクターとの距離の判定処理を追加していきます。

まとめ

今回は長い手順になりましたが、Unreal Engineで配置したアイテムにキャラクターの持ち物として管理する「インベントリ」画面を作る手順について書きました。

アクションゲームをプレイしていると、必ずと言って良いほど実装されている[インベントリ]機能があります。

実際にゲームで使えるようになるには、複雑な機能が必要ですが最初の勉強として簡単な持ち物管理の画面を作ってみます。

Unreal Engineのゲーム開発でアイテムを管理する[インベントリ]画面を表示させたい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です