ゲーム実行時に基本的に変更のないマスタデータに関して。それをUnityで扱うのにはいろいろな手段があるかと思います。
その中で Unityでよく使われる方法として ScriptableObjectがあります。

前回から、その ScriptableObjectについてと、その使用法を解説しています。
マスタデータをScriptableObjectで管理してみる Vol.1

Unity Basic_172

【ScriptableObjectを実際に使用してみる】

① ScriptableObjectクラスを継承したクラスを作成

通常Unityエディタ上で C#スクリプトを作成すると「MonoBehaviour」を継承しているクラスが作成されます。
Unity Basic_175

その継承元クラスを「MonoBehaviour」から「ScriptableObject」に変更します。

 Public class クラス名 : ScriptableObject

と言う形で作ることになります。
Unity Basic_176


ScriptableObjectを継承したクラス内にマスターデータの変数を、Inspectorビュー上から変更可能にするために「SerializeField」か「public」で定義します。
ここでは、他のクラスからの変数の値が直接変更できないように、「SerializeField」を使用して private定義します。
そして、このデータを他のクラスから使用するためにプロパティとして Getterも作成します。
Unity Basic_177


Unityエディタ上のメニューからScriptableObjectアセットを作成できるように、このクラスに [CreateAssetMenu]属性をつけます。

 [CreateAssetMenu]

Unity Basic_178


これで ScriptableAssetのスクリプトは完成です。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu]
public class Test_ScriptableObject : ScriptableObject
{
    [SerializeField] private int max_HP;
    [SerializeField] private int max_MP;

    public int Max_HP
    {
        get { return max_HP; }
    }

    public int Max_MP
    {
        get { return max_MP; }
    }
}


Unityエディタ上からScriptableObjectアセットを作成

Unityエディタ上から ScriptableObjectアセットを作成します。
Unityエディタ上のメニューから以下ををクリックします。

 Assets > Create > クラス名(Test_Scriptable Object)

Unity Basic_179

ProjectビューにScriptableObjectアセットが作成されました。
Unity Basic_180


InspectorビューからScriptableObjectアセットのデータ設定

Projectビュー上の ScriptableObjectアセットを選択して、Inspectorビュー上から値を設定します。
Unity Basic_181


ScriptableObjectを使用する側のスクリプトを作成

作成した ScriptableObjectを使用する側のスクリプトを作成します。
ここでの例では、ただ ScriptableObjectのデータを参照して表示するだけのテストプログラムです。
Unity Basic_182

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test_Use_ScriptableObject : MonoBehaviour
{
    public Test_ScriptableObject data;

    void Start()
    {
        Debug.Log("MAX HP: " + data.Max_HP);
        Debug.Log("MAX MP: " + data.Max_MP);
    }
}

スクリプト内の public変数に、ScriptableObjectアセットを割当てます
Unity Basic_183

これで完成です。
実行してテストしてみましょう。ScriptableObjectのデータが正しく表示されています。
Unity Basic_184



今回紹介した ScriptableObjectを使用しない代替方法がいくらでもあります。
ですので、初心者1人でゲームを作成している段階だとあまり利用しないかと思います。
複数人開発で規模が少し大きくなると使用する技術と言えるでしょう。



Sponsored Link