ソースコード
以下のクラスをUnityプロジェクトに追加する
gist.github.com
使い方
任意のタイミングでこのクラスのインスタンスを作成する
引数はプールしたいオブジェクトのプレハブ
_pool = new ObjectPool(_targetPrefab);
オブジェクトを利用するときはこのインスタンスから取得する
var newObject = _pool.Get();
不要になったオブジェクトはdisableにする
newObject.SetActive(false);
Sphereオブジェクトを使い回すサンプル
サンプルコード
using System.Collections; using UnityEngine; public class Sample : MonoBehaviour { [SerializeField] private GameObject _targetPrefab = null; private ObjectPool _pool; void Start() { _pool = new ObjectPool(_targetPrefab); } void Update() { var newObject = _pool.Get(); newObject.transform.position = Vector3.zero; StartCoroutine(DisableObject(newObject, 0.5f)); } IEnumerator DisableObject(GameObject target, float delaySeconds) { yield return new WaitForSeconds(delaySeconds); target.SetActive(false); } }
注意点
- 取得したオブジェクトはDestroyしない
- プール対象のオブジェクトにアタッチされているMonoBehaviourのAwake, Startは生成時のみに呼び出されるため、初期化など取得するたびに行いたい処理はOnEnableなどに記述するか、直接呼ぶようにする