ゲーム実行時に基本的に変更のないマスタデータに関して。それをUnityで扱うのにはいろいろな手段があるかと思います。
その中で Unityでよく使われる方法として ScriptableObjectがあります。
前回から、その ScriptableObjectについてと、その使用法を解説しています。
【マスタデータをScriptableObjectで管理してみる Vol.1】

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

[CreateAssetMenu]

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


作成した ScriptableObjectを使用する側のスクリプトを作成します。


その中で Unityでよく使われる方法として ScriptableObjectがあります。
前回から、その ScriptableObjectについてと、その使用法を解説しています。
【マスタデータをScriptableObjectで管理してみる Vol.1】

【ScriptableObjectを実際に使用してみる】
① ScriptableObjectクラスを継承したクラスを作成
通常Unityエディタ上で C#スクリプトを作成すると「MonoBehaviour」を継承しているクラスが作成されます。

その継承元クラスを「MonoBehaviour」から「ScriptableObject」に変更します。
Public class クラス名 : ScriptableObject
と言う形で作ることになります。

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

これで 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)
ProjectビューにScriptableObjectアセットが作成されました。

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

④ ScriptableObjectを使用する側のスクリプトを作成
作成した ScriptableObjectを使用する側のスクリプトを作成します。
ここでの例では、ただ ScriptableObjectのデータを参照して表示するだけのテストプログラムです。
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アセットを割当てます。

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

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