オブジェクトプールを新しく自作した。
前に作ったオブジェクトプール
tsubakit1.hateblo.jp
オブジェクトプールについて
オブジェクトプールとはオブジェクトの生成・破棄を回避するギミック。基本的にオブジェクトやインスタンスの生成・破棄はパフォーマンスに影響を与える候補の中で上位にあり、特にマネージドコード上で動作するUnityはこの影響が顕著に出る。 使わなくなったら破棄するのではなく、キャッシュしておき使用するタイミングで初期化・再配置するオブジェクトプールがパフォーマンスの改善に役立つことがある。
使い方
Pool.csをプロジェクトの適当なフォルダに配置後、下のコードのようなコードを記述。
// prefabをキャッシュするPoolコンポーネントを作成する。
// 既にprefabをキャッシュするPoolがある場合はそれを利用する。
var pool = Pool.GetObjectPool(prefab);// ...
// インスタンス生成
GameObject obj = pool.GetInstance();
static void Pool.GetObjectPool(GameObject prefab); このメソッドでプールするオブジェクトを登録する。GetInstance() でインスタンスを取得する。
オブジェクトはsetActive(false) で再利用可能になる。例えば画面外にオブジェクトが移動したらfalseにするといった処理を記述して使用する。
前回との違いは、プールできるオブジェクトの期待値と最大値がある事だ。オブジェクトは最大値までプールする事が可能だが、一定期間ごとにオブジェクトの掃除が走り、期待値の数まで使用していないオブジェクトを破棄する。