Unityで3D脱出ゲーム

Unity 3D脱出ゲームの作り方その20:アイテムボックスの作成方法(メイン編)

2020年12月31日

Unityで作る3D脱出ゲームの作り方を紹介している記事その20です。

僕が所属しているオンラインサロンの
先生である嶋津さんが作成された動画を
見ながら勉強した内容について、

3D脱出ゲームの作り方

としてまとめている記事になります。

その20となるこの記事では、

アイテムボックスとアイテムデータベースを作成する方法

についてお伝えしています。

参考となる動画はこちらです。

【Unity3D】脱出ゲームの作り方 # 20アイテムボックスの作成 メイン編

スポンサーリンク

この動画で勉強すること

▶︎アイテムボックスとアイテムデータベースを作成する方法を学ぶ。

目標1

アイテムボックスのUIを作る。

=>アイテムボックスのCanvasとPanelを作る。

=>アイテムボックスのSlotを作り、大きさを調整する。

=>Slotをプレハブ化して複製する。

=>Slotの位置を調整する。

=>ズーム用のボタンを作成する。

目標2

アイテムボックスの処理を作成する。

=>C#スクリプトを作成する。(ItemBox)

=>ItemBoxスクリプトにコードを書く。

=>PickupObjスクリプトにコードを書く。

=>ItemBoxCanvasにItemBoxスクリプトを付ける。

目標3

アイテムのデータベースの用意をする。

=>ItemDatabaseEntityというC#スクリプトを作る。

=>ItemDatabaseEntityスクリプトにコードを書く。

=>Itemスクリプトを[Serializable]にする。

=>プロジェクトフォルダにItemDatabaseEntity.assetを作る。

=>ItemDatabaseEntityの設定をする。

目標4

アイテムのデータベースを作成する。

=>Hierarchyに空のオブジェクトを作る(ItemDatabase)

=>C#スクリプトを作成する。(ItemDatabase)

 =>ItemDatabaseスクリプトにコードを書く。

 =>Itemスクリプトにコードを書く。

ItemBoxスクリプトのコード

アイテムボックスを作るために
作成したItemBoxのコードは
以下となります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemBox : MonoBehaviour
{
    //どこからでも利用できる変数
    public static ItemBox instance;
    private void Awake()
    {
        //自分を入れる
        instance = this;
    }
    // TODO:クリックしたらItemを受け取る
    public void SetItem(Item item)
    {
        Debug.Log(item.type);
    }
}

PickupObjスクリプトのコード

アイテムボックスの作成をするために
編集したPickupObjのコードは
以下となります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PickupObj : MonoBehaviour
{
    // TODO:アイテムの種類を設定する
    public Item.Type type;
    // TODO:クリックされたら、アイテムBoxに配置される
    public void OnClickObj()
    {
        // データベースからアイテムを生成する
        Item item = ItemDatabase.instance.spawn(type);
        ItemBox.instance.SetItem(item);
        // クリックしたら消える
        gameObject.SetActive(false);
    }
}

ItemDatabaseEntityのコード

アイテムデータベースを作るために
作成したItemDatabaseEntityの
コードは以下となります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu]
public class ItemDatabaseEntity : ScriptableObject
{
    public List<Item> items = new List<Item>();
}

ItemDatabaseのコード

アイテムデータベースを作るために
作成したItemDatabaseの
コードは以下となります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ItemDatabase : MonoBehaviour
{
    public static ItemDatabase instance;

    private void Awake()
    {
        instance = this;
    }

    [SerializeField] ItemDatabaseEntity ItemDatabaseEntity = default;

    //Itemをtypeから生成する
    public Item spawn(Item.Type type)
    {
        for(int i=0; i< ItemDatabaseEntity.items.Count; i++)
        {
            Item itemData = ItemDatabaseEntity.items[i];

            //データベースの中からtypeが一致するものを探す
            if (itemData.type == type)
            {
                //一致したら、Itemを生成して渡す
                return new Item(itemData);
            }
        }
        return null;
    }
}

Itemスクリプトのコード

アイテムデータベースを作るために
編集したItemのスクリプトの
コードは以下となります。

using System;
[Serializable] // インスペクターで表示される
public class Item
{
    // 種類を持っている
    public enum Type
    {
        RedTile,
        BlueTile,
        YellowTile,
        Key,
        Coin,
    }
    public Type type;
    // TODO:画像を持っている
    public Item(Item item)
    {
        this.type = item.type;
    }
}

アイテムボックスの作成(メイン編)で勉強したことのまとめ

3D脱出ゲームの作り方その20
「アイテムボックスの取得 メイン編」で
勉強した内容についてのまとめです。

アイテムボックスの作成を行うには
 まずアイテムボックスのUIを作成します。

そして、アイテムボックスの処理を
 作るためにC#スクリプトを作成し、
 コードを書きます。

次にアイテムデータベースの
 作成をするためにC#スクリプトを
 作ってコードを書きます。

そしてItemスクリプトを編集し、
 その後プロジェクトフォルダに
 ItemDatabaseEntity.assetを作ります。

ItemDatabaseEntity.assetを
 設定したら、次はアイテムの
 データベースを作成します。

ItemDatabaseスクリプトを作成し、
 コードを書きます。

最後はHierarchyに
 空のオブジェクトを作成し、
 それにItemDatabaseスクリプトを
 つけて完了です。

以上の作業を行った後、アイテムを
クリックするとアイテムのtypeが
ログに表示されるようになります。

アイテムをクリックするとアイテムタイプがログで表示される

「アイテムボックスの取得 メイン編」は以上です。

スポンサーリンク

-Unityで3D脱出ゲーム