はじめに
「Prototype」を使用することで、オブジェクトプールを簡単に実現することができます
使い方
例えば、下記のような自機を管理するクラスと
using UnityEngine; public class MyShip : MonoBehaviour { public Prototype m_prototype; private void Update() { if ( Input.GetKeyDown( KeyCode.Z ) ) { m_prototype.Instantiate<Shoot>(); } } }
次のような弾を管理するクラスを用意して
using UnityEngine; public class Shoot : MonoBehaviour { private void Awake() { GetComponent<Prototype>().OnReturnToPool += OnReturnToPool; } private void Update() { if ( Input.GetKeyDown( KeyCode.X ) ) { GetComponent<Prototype>().ReturnToPool(); } } private void OnReturnToPool() { Debug.Log( "OnReturnToPool" ); } }
そして、下記のようにオブジェクトを用意して
この状態でゲームを起動して、Z や X キーを押すことで
オブジェクトプールが正常に動作していることが確認できます
また、生成したオブジェクトを無効化した時に
登録したコールバック関数が呼び出されてログが出力されていることも確認できます
参考ツイート
Prototype: a tiny but powerful @unity3d component from @HeavensVault, now open source #unitytips https://t.co/DwWN9smcCm#gamedev #indiedev pic.twitter.com/uEG7ZgRXQc
— inkle (@inkleStudios) 2017年10月17日