【Unity】デバッグにも便利! ScriptableObjectによるデータベースの作成

【PR Unityアセットストア】パブリッシャーセール開催中!

凍った川や湖が表現できるマテリアルやシェーダーのアセットIce World がクーポンコード「NATUREMANUFACTURE2024」で無料でゲットできます
7月25日 23:59まで

Ice World

はじめに

・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でパラメーターのデータベース化と参照方法について紹介しました

独自のクラスを使った便利な活用方法もあるので、後で紹介したいと思います

タイトルとURLをコピーしました