ScriptableObjectとは?
端的にいうとUnityのゲームの設定を保存できるものです。
自分の作業環境で簡単なテストを行うときなどに使用すると便利です。またGUIからゲームの設定などを行えるのでテストデータのファイルを更新・保存を繰り返さなくてすむのも利点です。
↓例としてゲームの演出をテストするとしてこんな感じのものを作りました
ScriptableObjectの作り方
一番簡単なScriptableObjectを作成する際に必要なファイルは「ScriptableObject」を継承したクラスを含むC#ファイルのみです。下記のような簡単な記述でScriptableObjectを作成することができます。
using UnityEngine;
using UnityEditor;
using System.Collections;
public class LocalEffectSetting : ScriptableObject {
public bool UseLocalEffectResource = false;
public GameObject EffectResource;
[Range(0,100.0f)]public float DelayTime = 0.0f;
public string EffectName = "";
[MenuItem ("Assets/Create/LocalEffectSetting")]
static void CreateLocalEffectSetting ()
{
LocalEffectSetting localEffectSetting = CreateInstance<LocalEffectSetting> ();
string path = AssetDatabase.GenerateUniqueAssetPath("Assets/Resources/ScriptableObject/LocalEffectSetting.asset");
AssetDatabase.CreateAsset(localEffectSetting, path);
AssetDatabase.Refresh ();
}
}
まず下記抜粋部で設定したい値を定義しました。Unityエディタの拡張機能も使用することができます。
public bool UseLocalEffectResource = false;
public GameObject EffectResource;
[Range(0,100.0f)]public float DelayTime = 0.0f;
public string EffectName = "";
↓Unityエディタの拡張機能を使用して入力をスライダーにした
次にScriptableObjectを作成するメソッドです。作成した「LocalEffectSetting」のインスタンスを作成し、指定したパスにAssetデータとして保存しています。
static void CreateLocalEffectSetting ()
{
LocalEffectSetting localEffectSetting = CreateInstance<LocalEffectSetting> ();
string path = AssetDatabase.GenerateUniqueAssetPath("Assets/Resources/ScriptableObject/LocalEffectSetting.asset");
AssetDatabase.CreateAsset(localEffectSetting, path);
AssetDatabase.Refresh ();
}
このままでは作成用のメソッド「CreateLocalEffectSetting」を実行できないので下記のように記述し、Unity上から実行できるようにします。
[MenuItem ("Assets/Create/LocalEffectSetting")]
実行するとScriptableObjectが作成されます。あとは値の中身を設定して使用するだけです。前述のソースで作成した場合は下記のようにすることで使用することができます。
LocalEffectSetting localEffectSetting = Resources.Load<LocalEffectSetting>("ScriptableObject/LocalEffectSetting");
終わりに
ScriptableObjectを上手に使用することでゲームのテストを容易に行うことができるようになります。またScriptableObjectだけでなくUnityエディタの拡張機能を使いこなすことでゲーム開発を円滑に進めていくことができると思います。これらを使いこなして快適なゲーム開発ライフを送りましょう!!