スクリプト
上記のスクリプトをシーンのゲームオブジェクトにアタッチして実行すると
オブジェクトプールの動作を確認できます
実行例
プールにオブジェクトが不足している場合は新規で生成されます
プールに非アクティブなオブジェクトが存在する場合は
新規で生成せずに非アクティブなオブジェクトをアクティブにします
プールの最大数 maxSize
を超えて生成されたオブジェクトは
プールに戻されずに削除されます
ObjectPool.Clear
でプールをリセットできます
collectionCheck について
m_objectPool = new ObjectPool<GameObject> ( createFunc: CreatePooledItem, actionOnGet: OnTakeFromPool, actionOnRelease: OnReturnedToPool, actionOnDestroy: OnDestroyPoolObject, collectionCheck: true, // ★ defaultCapacity: 10, maxSize: 10 );
ObjectPool のコンストラクタで collectionCheck
に true を指定した場合、
m_objectPool.Release( gameObject ); m_objectPool.Release( gameObject );
すでにプールに戻されているオブジェクトをプールに戻そうとすると
InvalidOperationException: Trying to release an object that has already been released to the pool.
上記のエラーが発生するようになります(Unity エディタでのみ)
collectionCheck
に false を指定すると、すでにプールに戻されているオブジェクトを
プールに戻そうとしてもエラーは発生しなくなります
GC Alloc について
オブジェクトプールを使用しても GC Alloc は発生しなかった
(1.5 KB 発生している GC Alloc は OnGUI によるもの)