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でアイテムのデータを
管理することができるようになります。
とても便利です!
参考画像