はじめに
・RPGの敵キャラクターの名前、HP、MP…
・脱出ゲームのアイテムの名前、アイテム画像
など、多くのパラメーターを使用するゲームは多々あります
ScriptableObjectを使うと、これらのアイテムのパラメーターを効率よく管理できます
SctiptableObjectとは?
ゲーム中に変化しないパラメーターを保存することができるデータコンテナです
データはインスペクターから編集することができます
SctiptableObjectのメリット
メモリの節約ができる
同じパラメーターを持った敵キャラクターが複数存在するとします
パラメーターは同じでもそれぞれ別々のデータとして扱われます
ScriptableObject を使うと、パラメーターを参照できるので、キャラクターそれぞれがパラメーターを持つ必要がなくなります
エディタ実行中にパラメーターを編集しても保存される
実行中にインスペクターをいじっても、普通は停止すると元に戻ってしまいますが、ScriptableObjectでは元に戻りません
そのため、エディタ上でデバッグしながらパラメーターの調整が行えます
やってみた
今回は脱出ゲームで使うアイテムのデータベース化を想定します
スクリプトを作成します
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// メニュー からデータを作成できるようにしておく
[CreateAssetMenu(menuName = "ScriptableObject/Spawn ItemData")]
public class ItemData : ScriptableObject
{
// ここにパラメーターを書く
public string ItemName;
public Sprite ItemSprite;
public string Comment;
}
名前は ItemData としましたが、自由につけてもらって構いません
次に、Assets > Create から、データベースを作成します

名前は ItemDatabase にしました
インスペクター上でパラメーターが編集できるようになっています

エディタ実行中に編集しても、変更内容は変わりません
データの参照方法
ItemDataを取得して、使用します
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetItem : MonoBehaviour
{
public ItemData itemData;
void Start()
{
Debug.Log("アイテム名" + itemData.ItemName);
}
}

おわりに
ScriptableObjectでパラメーターのデータベース化と参照方法について紹介しました
独自のクラスを使った便利な活用方法もあるので、後で紹介したいと思います