今回はUnityの2Dゲームで簡単なアイテム欄(インベントリ)を実装していきます。
インベントリはゲームによって機能が大きく異なり、その機能によって実装方法が大きく異なります。今回は「かなりシンプルな仕組みで実装」のPart1です。
はじめに
Unityのインストール方法・日本語化は下記から。
Unityのヴァージョン
今回使用するのは「Unity 2020.3.21f1」ヴァージョン。2Dテンプレートで作成しています。
事前準備として、2Dキャラクターの移動が実装済みの段階です。
今回やる事
アイテム欄は「画面に常に表示」している状態、「アイテムを取得したらアイテム欄に移動する」というものすごく簡単な感じです。まずはアイテムを移動するところまでを実装。
実装開始
では、実際に実装していきます。
アイテム欄の設置
まずはアイテム欄を作成。ヒエラルキーで右クリック、UI→画像を追加。

Canvasが追加されるのでレンダーモードを変更。

追加した画像の名前を「ItemSet」に変更、位置も変えます。画面下の白四角がアイテム欄です。

アイテム作成
同じくUI→画像を追加して、名前をCapuleItemにします。
位置やソース画像、色を変更しておきます。下記の赤いカプセルがアイテムです。

CapsuleItemの「コンポーネントを追加」から「CapsuleColider2D」、新規スクリプトで「ItemGet」を追加。コライダーはトリガーにするにチェックを入れます。

「Player」に新規スクリプトで「ItemInventory」を追加。

スクリプトの作成
ItemInventoryのスクリプトは下記の様に変更。
アイテム欄を利用できるようにしている感じですね。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemInventory : MonoBehaviour { public GameObject ItemSlot; public static ItemInventory instance { get; private set; } private void Awake() { instance = this; } }
ItemGetのスクリプトは下記の様に変更。
アイテムにプレイヤーがぶつかったらアイテムを移動するって感じですね。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemGet : MonoBehaviour { private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Player")) { transform.position = ItemInventory.instance.ItemSlot.transform.position; } } }
最後に、Playerにタグをつけて、ItemSlotにセット。

実際に動かしてみて、Playerがアイテムに触れたときにアイテム欄に移動すればOK

とりあえず「アイテムを拾う」部分まで。