LoginSignup
11
11

More than 5 years have passed since last update.

ScriptableObjectことはじめ

Posted at

ScriptableObjectとは?

端的にいうとUnityのゲームの設定を保存できるものです。
自分の作業環境で簡単なテストを行うときなどに使用すると便利です。またGUIからゲームの設定などを行えるのでテストデータのファイルを更新・保存を繰り返さなくてすむのも利点です。

↓例としてゲームの演出をテストするとしてこんな感じのものを作りました
ScriptableObjectGui.png

ScriptableObjectの作り方

一番簡単なScriptableObjectを作成する際に必要なファイルは「ScriptableObject」を継承したクラスを含むC#ファイルのみです。下記のような簡単な記述でScriptableObjectを作成することができます。

LocalEffectSetting.cs
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エディタの拡張機能を使用して入力をスライダーにした
ScriptableObjectDelayTime.png

次に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")]

ScriptableObjectCreate.png

実行するとScriptableObjectが作成されます。あとは値の中身を設定して使用するだけです。前述のソースで作成した場合は下記のようにすることで使用することができます。

LocalEffectSetting localEffectSetting = Resources.Load<LocalEffectSetting>("ScriptableObject/LocalEffectSetting");

終わりに

ScriptableObjectを上手に使用することでゲームのテストを容易に行うことができるようになります。またScriptableObjectだけでなくUnityエディタの拡張機能を使いこなすことでゲーム開発を円滑に進めていくことができると思います。これらを使いこなして快適なゲーム開発ライフを送りましょう!!

11
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11