Unityで3D脱出ゲーム

Unity 3D脱出ゲームの作り方その5:アイテムのデータベース化をする方法

2020年12月8日

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

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

3D脱出ゲームの作り方

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

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

アイテムのデータベース化をする方法

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

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



【Unity3D】脱出ゲームの作り方 # 05 アイテムのデータベース化

また、Udemyの場合は、
セクション4の39

「アイテムデータベースの実装」

の内容となります。

この動画で勉強すること

▶︎アイテムのデータベース化をする。

目標1

C#スクリプトを作成して、
アイテムのデータベースとなる
ファイルを用意する。=>(ItemListEntity)

目標2

Unityエディタでデータベースの
アセットを作成してアイテムの
データを設定する。=>(ItemListEntity.asset)

目標3

設定したアイテムのデータを
生成するためのC#スクリプトを作る。=>(ItemGenerater)

目標4

アイテムデータの生成方法に合わせて、
以前作ったC#スクリプトファイルの
修正やコードの追加を行う。

目標5

UnityエディタでItemGeneraterを
作って設定を行い、実際に動作確認をしてみる。

ItemListEntityスクリプトのコード

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

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

[CreateAssetMenu]
public class ItemListEntity : ScriptableObject
{
    public List<Item> itemList = new List<Item>();
}

ItemGeneraterスクリプトのコード

アイテム(データ)の生成を行う
ために作成したItemGeneraterの
コードは以下となります。

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

public class ItemGenerater : MonoBehaviour
{
    [SerializeField] ItemListEntity itemListEntity = default;

    // どこでも実行できるやつ
    public static ItemGenerater instance;
    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
    }

    // PickupObjスクリプトのstart関数で実行する
    public Item Spawn(Item.Type type)
    {
        // itemListの中からtypeと一致したら同じitem(データ)を生成して渡す
        foreach (Item item in itemListEntity.itemList)
        {
            if(item.type == type)
            {
                return new Item(item.type, item.sprite);
            }
        }
        return null;
    }
}

PickupObjスクリプトのコード

今回修正したPickupObjの
コードは以下となります。

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

public class PickupObj : MonoBehaviour
{
    [SerializeField] Item.Type itemType = default; //defaultを入れると警告が出なくなる
    Item item = default;


    private void Start()
    {
        //itemTypeに応じてitemを生成する(アイテムに対してTypeとSpriteを設定する)
        item = ItemGenerater.instance.Spawn(itemType);
    }

    //クリックしたら消す
    public void OnClickObj()
    {
        ItemBox.instance.SetItem(item);
        gameObject.SetActive(false);
    }
}

itemスクリプトのコード

アイテムのデータベース化の
ために修正したitemのコードは
以下となります。

using System;
using UnityEngine;

[Serializable]
public class Item
{

    //列挙型:種類を列挙する
    public enum Type
    {
        Cube,
        Ball,
    }

    public Type type;     // 種類
    public Sprite sprite; // Slotに表示する画像


    public Item(Type type, Sprite sprite)
    {
        this.type = type;
        this.sprite = sprite;
   }
}

アイテムのデータベース化で勉強したことのまとめ

3D脱出ゲームの作り方その5で
勉強した内容についてのまとめです。

アイテムのデータベース化をする方法は、
 アイテムのデータベースの元になる
 C#スクリプトを作り、Unityの
 エディタでassetファイルを作ってあげる。

次に、Unityのエディタで
 アイテムのデータを設定する。

そして、設定したアイテムデータを
 生成するためのC#スクリプトを作り、
 Unityエディタのアイテム生成をする
 オブジェクトにつけてあげる。

今回の内容を実践すると、
ItemListEntityでアイテムのデータを
管理することができるようになります。

とても便利です!

参考画像

アイテムのデータベース化が完了した画像

-Unityで3D脱出ゲーム