テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

新・オブジェクトプール

オブジェクトプールを新しく自作した。

前に作ったオブジェクトプール
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にするといった処理を記述して使用する。

前回との違いは、プールできるオブジェクトの期待値と最大値がある事だ。オブジェクトは最大値までプールする事が可能だが、一定期間ごとにオブジェクトの掃除が走り、期待値の数まで使用していないオブジェクトを破棄する。

スクリーンショット 2014-03-10 1.53.05