Unity で ScriptableObject を作成する

Unity の ScriptableObject は、再利用可能なデータ駆動型オブジェクトの作成を可能にする特別なタイプのクラスです。通常、ゲーム データ、構成、設定の保存と管理に使用されますが、ゲーム設定の管理、データ駆動型システムの作成、キャラクターの能力の定義、ダイアログ の保存など、さまざまな目的にも使用できます。 Unity プロジェクト のデータを整理および管理するための柔軟かつ効率的な方法を提供します。

ScriptableObjects の主な利点は、スクリプトの複数のインスタンス間で簡単に共有および再利用できるデータ コンテナを作成する方法を提供することです。これらは、特定のデータ型のインスタンスを作成するための "blueprints" と考えることができます。ScriptableObject の複数のインスタンスを作成し、それらのデータを個別に変更することができます。

ScriptableObject を作成する

ScriptableObject は Unity エディターで作成し、プロジェクトにアセットとして保存できます。MonoBehaviour スクリプトとは異なり、ScriptableObject はシーン内の GameObject にアタッチされませんが、他のスクリプトから参照および使用できます。

ScriptableObject を作成するには、次の手順に従います。

  • Unity エディタ で、プロジェクト ウィンドウを右クリックし、"Create -> C# ScriptableObject" に移動します。
  • わかりやすい名前を付けて、任意のコード エディターでスクリプトを開きます。

ScriptableObject クラスの定義:

  • スクリプトでは、ScriptableObject クラスから継承します。
  • ScriptableObject に保存するデータを表すパブリック フィールドまたはプロパティを定義します。
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    public string dataName;
    public int dataValue;
}

上の例では、'dataName (string)' と 'dataValue (int)' という 2 つのパブリック フィールドを持つ ScriptableObject クラスを定義します。

インスペクターでの ScriptableObject のカスタマイズ:

  • '[SerializeField]' のような属性を使用して、特定のフィールドを Unity インスペクターに公開して変更できるようにしながら、その ScriptableObject を使用するスクリプトからそれらのフィールドにアクセスできないようにします。
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    [SerializeField]
    private string dataName;

    [SerializeField]
    private int dataValue;
}

ScriptableObjects のインスタンスの作成:

  • Unity エディターでプロジェクト ウィンドウを右クリックし、"Create" を選択して ScriptableObject のインスタンスを作成します。
  • インスペクターで作成したインスタンスのデータをカスタマイズします。

他のスクリプトから ScriptableObject データにアクセスする:

  • MonoBehaviour スクリプトまたはその他のスクリプトで、ScriptableObject タイプのパブリックまたはシリアル化されたフィールドを作成し、それをインスペクター ビューで割り当てます。
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • ScriptableObject インスタンスのデータには、割り当てられたフィールドを通じてアクセスできるようになります。
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

    private void Start()
    {
        Debug.Log("Data Name: " + myData.dataName);
        Debug.Log("Data Value: " + myData.dataValue);
    }
}

結論

ScriptableObjects は、ゲーム プロジェクトのデータを管理および整理するための多用途ツールです。 ScriptableObjects は、再利用可能でカスタマイズ可能なデータ コンテナを作成することにより、構成、設定、その他のインスタンス固有ではない情報を保存する柔軟かつ効率的な方法を提供します。 ScriptableObject の複数のインスタンスを作成し、それらのデータを個別に変更できる機能により、データ駆動型システムの作成、ゲーム設定の管理、キャラクターの能力の定義、ダイアログやクエスト情報の保存などが簡単になります。 ScriptableObjects を利用すると、Unity プロジェクトの再利用性、保守性、拡張性が向上し、最終的には開発プロセスが合理化され、より堅牢でダイナミックなゲームの作成が可能になります。

おすすめの記事
Poppy Playtime からインスピレーションを得て Unity で GrabPack を作成する
Unity での VR ヘッドセット コントロールの実装
Unity でのカスタム更新レートの実装
Unity でバズーカを作成する
Unity でのシーンの読み込みガイド
Unity で鍵を使ってドアを開けるチュートリアル
Unity コードで JSON を操作する組み込みの方法