ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - ScriptableObject の作り方・使い方

初めに

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



前提知識

 本記事では、継承と Attribute(属性)を使用します。これらがよくわからない場合は先に、下のリンク先をご覧ください。

fineworks-fine.hatenablog.com

fineworks-fine.hatenablog.com

ScriptableObject

ScriptableObject とは

 ScriptableObject とは、ステータスなど繰り返し使用されるデータを保存するために使用されるオブジェクトを作成する場合に使われるクラスです。

Scriptable Object の良さ
  • データの再利用性が高く、同じデータを複数のゲームオブジェクトで使用できる
  • アセットとして保存されるため、プロジェクトのどこからでもアクセスできる
  • スクリプトで簡単に変更できる
  • Unityエディタ上でゲームを再生しているときに値を変更できる
ScriptableObject の作り方

 ScriptableObject はスクリプトに ScriptableObject クラスを継承させて作ります。CreateAssetMenu 属性を使用して、メニューから ScriptableObject が作成できるようにします。

(ScriptableObject の作り方)

  1. Assets 内で右クリック > Create > C# Script をクリックし、スクリプトを作成
  2. スクリプトに ScriptableObject クラスを継承
  3. 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 メニュー内のメニューアイテムの位置(省略可能)

  4. 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);
    }
}


補足

 CSV ファイルからデータを読み込み、ScriptableObject にデータを流すことができます。

fineworks-fine.hatenablog.com

最後に

  • ScriptableObject とは、ステータスなど繰り返し使用されるデータを保存するために使用されるオブジェクトを作成する場合に使われるクラス
  • スクリプトに ScriptableObject クラスを継承させて作る
  • ScriptableObject のインスタンスを取得することで、ScriptableObject に保存してあるデータを取得することができる