Unity標準のObjectPoolを触ってみることにしました。
一通りやりたいことはできそうだなと。
public class TokenPoolManager : SingletonMonoBehaviour<TokenPoolManager> { [SerializeField] private GameObject tokenPrefab; public ObjectPool<Token> TokenPool => _tokenPool ??= new ObjectPool<Token>(CreateFunc, ActionOnGet, ActionOnRelease); private void ActionOnRelease(Token obj) { obj.gameObject.transform.SetParent(transform); obj.gameObject.SetActive(false); } private static int _nextId; private ObjectPool<Token> _tokenPool; private void ActionOnGet(Token obj) { obj.gameObject.SetActive(true); } private Token CreateFunc() { var go = Instantiate(tokenPrefab); var token = go.GetComponent<Token>(); return token; } }
ポイントは
public ObjectPool
TokenPool => _tokenPool ??= new ObjectPool (CreateFunc, ActionOnGet, ActionOnRelease);
でしょうか。
単純にTokenPool = ほにゃららと初期化しようとするとstaticメソッドしか引数に渡せないためです。