初めに
Unity には、ScriptableObject と呼ばれるデータを保存するために使用されるオブジェクトを作成する場合に使われるクラスです。本記事では、ScriptableObject の作り方や使い方をまとめます。

前提知識
本記事では、継承と Attribute(属性)を使用します。これらがよくわからない場合は先に、下のリンク先をご覧ください。
fineworks-fine.hatenablog.com
ScriptableObject
ScriptableObject とは
ScriptableObject とは、ステータスなど繰り返し使用されるデータを保存するために使用されるオブジェクトを作成する場合に使われるクラスです。
Scriptable Object の良さ
- データの再利用性が高く、同じデータを複数のゲームオブジェクトで使用できる
- アセットとして保存されるため、プロジェクトのどこからでもアクセスできる
- スクリプトで簡単に変更できる
- Unityエディタ上でゲームを再生しているときに値を変更できる
ScriptableObject の作り方
ScriptableObject はスクリプトに ScriptableObject クラスを継承させて作ります。CreateAssetMenu 属性を使用して、メニューから ScriptableObject が作成できるようにします。
(ScriptableObject の作り方)
- Assets 内で右クリック > Create > C# Script をクリックし、スクリプトを作成
- スクリプトに ScriptableObject クラスを継承
- CreateAssetMenu 属性を追加
using UnityEngine; [CreateAssetMenu(fileName = "NewStatus", menuName = "ScriptableObjects/Status")] //Assets内のメニューから作成できるように public class StatusObject : ScriptableObject //ScriptableObjectクラスを継承 { public string characterName; public int maxHealth; public int currentHealth; public int attackPower; public int defensePower; }
CreateAssetMenu は Assets 内にメニューを追加するための Attribute(属性) です。
- fileName:新しく作成されるインスタンスで使用するデフォルトのファイル名
- menuName:Assets/Create メニューに表示されるこのタイプの表示名
- order:Assets/Create メニュー内のメニューアイテムの位置(省略可能)
- Assets 内で右クリック > Create > (CreateAssetMenuで設定したもの)をクリックして、ScriptableObject を作成
ScriptableObject の使い方
ScriptableObject のインスタンスを取得することで、ScriptableObject に保存してあるデータを取得することができます。
(例)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScriptableTest : MonoBehaviour { //ScriptableObjectを継承したスクリプト名 public StatusObject Status; //ScriptableObjectの取得 void Start() { Debug.Log("Name:" + Status.characterName + ", maxHealth" + Status.maxHealth); } }