ScriptableObjectを使ってみた
- ScripttableObjectとは
- 継承クラスを作る
- [CreateAssetMenu]
- [System.SerializableAttribute]
- データを使う方法
- メソッドを追加してみる
- 注意点
ScripttableObjectとは
公式マニュアルによると・・・
Unity - マニュアル: ScriptableObject
大量のデータを格納できるクラス
だそうです。
ここでは、モンスターの出撃データの管理にこれを使ってみようと思う。
継承クラスを作る
using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class MobPopList:ScriptableObject { public List<Param> route = new List<Param> (); [System.SerializableAttribute] public class Param { public string name; public float interval; public int quantity; } }
[CreateAssetMenu]
これを書くと、こんな感じでCreateメニューに表示されるようになる。
[System.SerializableAttribute]
Createを実行すると、ScripttableObjectのアセットが生成される。
System.SerializableAttributeを書くと、インスペクターで設定できるようになる。
データを使う方法
リストの読み込み
MobPopList mobList = Resources.Load ("パス") as MobPopList;
パラメータの取得
//Element0のquantityを取得する場合 mobList.route [0].quantity;
メソッドを追加してみる
using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class MobPopList:ScriptableObject { public List<Param> route = new List<Param> (); [System.SerializableAttribute] public class Param { public string name; public float interval; public int quantity; } //コレ追加 quantityの合計を取得するメソッド public int GetTotalQuanity () { int total = 0; for (int i = 0; i < route.Count; i++) { total += route [i].quantity; } return total; } }
メソッドの呼び出し方
MobPopList moblist = Resources.Load ("パス") as MobPopList; int mob_total = moblist.GetTotalQuanity ();
注意点
Paramの要素を追加したりするのは大丈夫だけど、クラスなどの名前を変更すると初期化されて設定したのが消えちゃうので注意。
以上。