【前回】の続きで、今回はSwarmObjectManagerの使い方のメモ。
■再利用可能なプレハブの設定
SwarmObjectManagerでプレハブを再利用するには、
SwarmItemを継承する必要がある。
初期化するには、protected override void OnStateChange()を使う。
これはオブジェクトがActive(生成)になったタイミングと、Inactive(ストック状態)になったタイミングで呼び出されるメソッド。
このタイミングで初期化してやれば良いっぽい。
ちなみにオブジェクトの削除はKill()で行う。
下はオブジェクトが生成(Active)されると、
5秒後に自分を殺しストック状態(Inactive)になるサンプルソース。
public class Item : SwarmItem {
protected override void OnStateChange()
{
switch (_state)
{
case STATE.Active:
Debug.Log("Active");
StartCoroutine(SelfKill());
break;
case STATE.Inactive:
Debug.Log("Instance");
break;
}
}
IEnumerator SelfKill () {
yield return new WaitForSeconds(5.0f);
Kill();
}
}
■オブジェクトを再利用するSwarmObjectManagerの設定
SwarmObjectManagerを設定する方法。
まずObjectManagerて名前のオブジェクトを作りSwarmItemManagerコンポーネントを追加。
次にItem Prefabsに最利用するプレハブを登録する。
(一つのSwarmItemManagerに複数のプレハブも登録できる)
最後にオブジェクトに次のスクリプトをObjectManagerに登録する。
ちなみにObjectManagerはシングルトンにしておくと便利なのかもしれない。
private SwarmItemManager manager;
void Start(){
manager = gameObject.GetComponent();
manager.Initialize();
}
// Update is called once per frame
void Update () {
manager.FrameUpdate();
}
(サンプルソースがそうなってた)
■オブジェクトを利用する。
オブジェクトに利用方法は簡単。
SwarmItemManager managerでマネージャーを参照可能にしておき、
SwarmItem obj = manager.ActivateItem() ;でInactiveからオブジェクトをひとつ取得するだけ。
(Inactiveが0個なら、新しくオブジェクトを作る)
オブジェクトの生成と削除はけっこう泥臭い部分なので、
こういったAssetsで負荷が軽減できるなら、どんどん試してみたい。