この記事でのバージョン
Unity 5.3.4f1 Personal
はじめに
まずはじめに、ScriptableObjectとは以下のようなもので、
変化しないデータを利用する時に活躍するものです。
データを格納するオブジェクトです。もう少し言えば、Unityがデータをシリアライズ・デシリアライズしパラメータを格納するための仕組みです。
ゲーム内では静的なパラメータ置き場としたほうが良いかもしれません。
そのScriptableObjectを使う時は以下のようにInspectorから設定するか
Resources.Loadを使って読み込みます。
MyScriptableObject myScriptableObject = Resources.Load<MyScriptableObject> ("MyScriptableObject");
上記のどちらの使い方でも基本的には問題ないのですが、
ちょっと参照しやすくなる方法があるので、今回はこれをご紹介!
Entity
その方法とは以下のように_entityとEntityを追加するだけです。
なお、分かりやすいようにScriptableObjectのクラスにEntityを作成していますが、
他のクラスに作成しても、もちろん大丈夫です。
using UnityEngine; using System.Collections; [CreateAssetMenu()]//Createメニューから作成できるようする属性 public class MyScriptableObject : ScriptableObject { //MyScriptableObjectが保存してある場所のパス public const string PATH = "MyScriptableObject"; //MyScriptableObjectの実体 private static MyScriptableObject _entity; public static MyScriptableObject Entity{ get{ //初アクセス時にロードする if(_entity == null){ _entity = Resources.Load<MyScriptableObject>(PATH); //ロード出来なかった場合はエラーログを表示 if(_entity == null){ Debug.LogError(PATH + " not found"); } } return _entity; } } //保存されているデータ public int IntData = 10; }
上記の通り、Entityへの初アクセス時にResources.Loadをするため、
Inspectorで設定したり、あらかじめLoadする必要がなくなります。
また他のクラスからのアクセスも、いつでもできる&簡単になります。
int intdata = MyScriptableObject.Entity.IntData;