Unityゲームの作り方メモ脱出ゲーム

【Unity 2D】脱出ゲームの作り方② アイテムボックス&アイテム取得の実装

Unity

1. はじめに

みなさん、こんにちは!今回は Unityで2D脱出ゲームを作る シリーズの パート2 です。前回は 部屋の作成部屋の移動処理 を実装しましたね。今回は、 アイテムボックスの作成アイテムの取得&使用処理 を追加して、ゲームをさらに進化させていきます!

脱出ゲーム では、部屋に隠された アイテム を集め、それを使って 鍵を開けたり、仕掛けを動かしたり するのが重要な要素です。例えば、「鍵」を見つけてドアを開ける、というのは定番の流れですよね。今回は、その アイテムを管理するシステム を作成していきます。

この記事では、以下の2つを実装します。

  1. アイテムボックスの作成
    • 画面上にアイテムボックスを表示し、取得したアイテムを管理できるようにする
  2. アイテムの取得&使用処理
    • アイテムをクリックすると、アイテムボックスに追加され、後で使用できるようにする

この機能を追加することで、 ゲームらしさがグッと増し、プレイヤーが謎解きや探索を楽しめるようになります!

プログラム初心者の方でも大丈夫!
スクリプトの解説もしっかり行うので、ぜひ一緒に作っていきましょう!




2. アイテムボックスの作成

2D脱出ゲームでは、取得したアイテムを管理する「アイテムボックス」が必要になります。このステップでは、アイテムボックスを UIで作成 し、 スクリプトでアイテムの取得・使用を制御する方法 を紹介します。


2-1. UIでアイテムボックスを作成

まず、ゲーム画面にアイテムボックスを表示しましょう。

コチラの画像を使用して作成しました。

1. アイテムボックスのUIを作成

  1. Canvas の下に Image を作成
  2. Itembox と名前を変更
  3. Inspector から アイテムボックスの画像 を設定

2. アイテムスロットを作成

  1. Itembox の下に 新しい Image を作成
  2. 名前を Box0 に変更
  3. InspectorBox0鍵の画像 を設定
  4. RectTransformPos X を調整し、アイテムボックスの 一番左に配置
  5. Box0非表示 (SetActive(false)) に設定
    アイテムを取得したら表示する 仕組みにするため

3. アイテムを増やす場合

  • Box0複製 (Box1, Box2 …) すれば、複数のアイテムスロットを作成可能!
  • 例えば Box1 には ドライバーBox2 には メモ など、取得するアイテムごとにスロットを用意できます。

2-2. アイテムボックスを管理するスクリプトを作成

次に、アイテムを取得・使用できるようにするためのスクリプトを作成します。

1. C#スクリプトを作成

  1. プロジェクトウィンドウ を右クリック
    CreateC# Script を選択
  2. 名前を ItemBox に変更
  3. Itembox オブジェクトに アタッチ

2. スクリプトの記述

スクリプトを開き、以下のコードを入力してください。

using UnityEngine;

public class ItemBox : MonoBehaviour
{
    public GameObject[] Boxs;  // アイテムボックスのスロット(配列)
    public static ItemBox instance;  // インスタンスを作成(シングルトン)

    private void Awake()
    {
        instance = this;  // 自身のインスタンスをセット
    }

    public void SetItem(Item.Type type)
    {
        int index = (int)type;  // アイテムの種類に応じたスロットを取得
        Boxs[index].SetActive(true);  // アイテムを取得するとスロットを表示
    }

    public bool CanUseItem(Item.Type type)
    {
        int index = (int)type;
        return Boxs[index].activeSelf;  // アイテムを持っているか確認
    }

    public void UseItem(Item.Type type)
    {
        int index = (int)type;
        Boxs[index].SetActive(false);  // アイテムを使用したら非表示にする
    }
}

2-3. スクリプトの仕組み

このスクリプトでは 3つの機能 を実装しています。

SetItem()
アイテムを取得 したときに、対応するアイテムスロットを 表示

CanUseItem()
→ アイテムを 所持しているかどうかを判定true / false を返す)

UseItem()
アイテムを使用 したときに、スロットを 非表示 にする


2-4. アイテムボックスを設定

スクリプトを適用するために、以下の設定を行いましょう。

1. アイテムスロットを Boxs に設定

  1. ItemboxInspector を開く
  2. Boxsサイズをアイテム数に合わせて変更(例:3個なら Size = 3
  3. Box0, Box1, Box2 … を Boxs のスロットにドラッグ&ドロップ

2. 実行してテスト

  • これで、 アイテムを取得するとボックスに追加 されるようになります!

まとめ

  • アイテムボックスの作成
    • CanvasItembox を配置
    • Box0(スロット)を作成して非表示
  • スクリプトでアイテム管理
    • SetItem():アイテム取得で 表示
    • CanUseItem()所持判定
    • UseItem():アイテム使用で 非表示

次のステップでは アイテムを実際に取得できるようにする処理 を実装します!




3. アイテムの作成

脱出ゲームでは、プレイヤーが鍵や道具を見つけ、それを使って次のエリアへ進むのが一般的な仕組みです。ここでは、部屋の中に「鍵(key)」を設置し、それをクリックするとアイテムボックスに追加される仕組みを作成します。


3-1. UIでアイテムを作成

まず、鍵となるアイテムを room0 に配置します。

手順

  1. Hierarchy(ヒエラルキー)ウィンドウroom0 を選択
  2. room0 の中に Image を作成
    • 名前を “key” に変更
  3. Inspector(インスペクター)ウィンドウ で以下の設定を行う
    • Imageコンポーネント に鍵の画像を設定
    • RectTransform を調整して、鍵を適切な位置に配置(例えば、テーブルの上など)
  4. 鍵をクリックできるようにする
    • Add Component から Button を追加
    • TransitionNone に変更(見た目の変化をなくすため)

これで鍵が画面上に表示され、クリックできるようになりました!


3-2. アイテム管理スクリプトの作成

次に、アイテムがクリックされたときにアイテムボックスへ追加されるように、スクリプトを作成します。

手順

  1. Project(プロジェクト)ウィンドウ を開く
  2. Assets フォルダ内で右クリック → CreateC# Script
  3. スクリプトの名前を “Item” に変更
  4. 作成した Item スクリプトを key にドラッグ&ドロップしてアタッチ
  5. スクリプトを開いて、以下のコードを入力
using System;
using UnityEngine;

public class Item : MonoBehaviour
{
    // アイテムの種類を定義
    [Serializable]
    public enum Type
    {
        Key,   // 鍵
        Item1, // 他のアイテム(例:ドライバーなど)
        Item2,
        Item3
    }

    public Type type; // このアイテムの種類

    // アイテムをクリックしたときの処理
    public void OnThis()
    {
        // アイテムボックスに追加
        ItemBox.instance.SetItem(type);
        
        // クリックされたアイテムを非表示
        gameObject.SetActive(false);

        // デバッグ用のログ出力
        Debug.Log(type + " をGET");
    }
}

3-3. 鍵のボタンに処理を設定

スクリプトを記述したら、鍵をクリックしたときに OnThis() が実行されるように設定します。

手順

  1. 鍵(key)の Inspector を開く
  2. Button コンポーネントの OnClick() にある 「+」ボタン をクリック
  3. Item スクリプトがアタッチされている keyオブジェクトOnClick() にドラッグ&ドロップ
  4. No Function になっている部分をクリック → ItemOnThis() を選択

これで設定完了!
ゲームを再生し、鍵をクリックするとアイテムボックスに追加されるようになります。


3-4. まとめ

このステップでは、脱出ゲームで欠かせない「アイテムの取得機能」を実装しました。

  • room0 に鍵を配置 し、クリック可能にした
  • Item スクリプトを作成 し、クリックでアイテムを取得する処理を実装
  • ボタンの OnClick()OnThis() を設定 し、クリック時にアイテムをアイテムボックスへ追加するようにした

次のステップでは、取得したアイテムを使って扉を開ける処理 を作成していきます!




4. アイテム取得処理の設定

アイテムを作成し、スクリプトを書いただけでは、まだゲーム内でアイテムを取得できるようになっていません。ここでは、実際にアイテムをクリックしたときにアイテムボックスに追加されるように設定していきます。


4-1. 鍵のボタン設定

まず、key オブジェクトの Button コンポーネントを設定します。

  1. Hierarchy ウィンドウで key を選択。
  2. Inspector ウィンドウの Button (Script) セクションを確認。
  3. On Click () のリストの + ボタンをクリック。
  4. None (Object) の部分に key オブジェクトをドラッグ&ドロップ。
  5. No Function のプルダウンを開き、Item → OnThis() を選択。

この設定により、ゲーム内で key をクリックすると OnThis() メソッドが実行されるようになります。


4-2. アイテム取得の動作確認

ゲームを再生して key をクリックし、以下の動作を確認します。

アイテムボックス に鍵のアイコンが表示される
key オブジェクトが非表示になる
✅ コンソールに「KeyをGET」と表示される

もし、アイテムボックスに表示されない場合は、以下をチェックしてください。

  • ItemBox オブジェクトの Boxs に、鍵のアイコン (Box0) が正しく設定されているか
  • Item スクリプトの SetItem(type); が正しく呼び出されているか
  • ItemBoxinstancenull になっていないか(Awake() が実行されているか)

4-3. 複数のアイテムを取得できるようにする

現在のスクリプトでは key しかアイテムとして取得できませんが、他のアイテムも追加したい場合は Item.Type に新しい種類を追加するだけで対応できます。

例えば、新しいアイテム Item1 を追加したい場合、以下の手順を実行します。

  1. Item.TypeItem1 を追加
    public enum Type { Key, Item1, // 新しいアイテム Item2, Item3 }
  2. ItemBox に新しい Box1 を作成し、Boxs のリストに追加。
  3. room0Item1 のオブジェクトを作成し、Item スクリプトをアタッチ。
  4. Item1OnClick()OnThis() を設定。

このようにすれば、新しいアイテムを追加するのも簡単です。

これで、アイテムをクリックすると取得できる処理が完成しました!次回は アイテムを使って扉を開ける処理 を実装していきます。




5. まとめ

今回は アイテムボックスの作成アイテムの取得処理 を実装しました!

まず、Canvas の中に Itembox を作成し、アイテムの表示エリアを準備しました。
次に、アイテムを取得したときにアイテムボックスに追加されるよう、ItemBox スクリプト を作成しました。
このスクリプトを使って、アイテムの取得・使用を管理できるようになりましたね!

また、アイテム自体の設定として、Item クラスを作成し、アイテムをクリックするとボックスに追加され、消える処理 を実装しました。
OnClick() を設定することで、ボタンを押すだけでアイテムを取得できるシステム が完成しました!

この仕組みを使えば、さまざまなアイテムを追加して、ゲームの仕掛けを増やすことができます!
例えば、鍵を取得したら扉を開けられるようにする など、ゲームの進行に合わせたアイテムの使い方を考えてみましょう。

次回は アイテムを使って扉を開ける処理 を実装していきます!
ぜひ、引き続き一緒に脱出ゲームを作っていきましょう!




よくある質問(FAQ)

Q
アイテムを複数持たせるにはどうすればいいですか?
A

ItemBoxGameObject[] Boxs に複数のアイテムスロットを用意し、それぞれのスロットにアイテムを対応させましょう。

Q
アイテムを取得したのにボックスに表示されません
A

SetItem()Boxs[index].SetActive(true); の処理が正しく動作しているか確認してください。また、Boxs に正しいオブジェクトがアタッチされているかもチェックしましょう。

Q
アイテムを使ったら、再取得できるようにできますか?
A

UseItem() の処理を変更し、アイテムを非表示にせず再度 SetActive(true) にすることで可能です。

タイトルとURLをコピーしました