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が
ログに表示されるようになります。
「アイテムボックスの取得 メイン編」は以上です。