オブジェクトプール
オブジェクトの生成と破棄を回避する「オブジェクトプール」を作りました。
使い方
まず以下からダウンロード・展開しUnityプロジェクトに入れます。
github.com
PoolManagerをシーンに追加
インスタンスを取得すると勝手に生成されるので必ず追加する必要はありませんが、
事前にパラメータを設定しておくこともできます。
(Prefabがnullだと開始時に例外を投げてプールが削除されます)
スクリプティング
PoolManagerはMackySoftネームスペース下にあるので、
usingエリアに追加します。
using MackySoft;
プールを取得
プールは以下のどちらかで取得できます。
"GetPoolSafe"は自動でプールを追加してくれます。
Pool pool = PoolManager.Insance[prefab]; Pool pool = PoolManager.GetPoolSafe(prefab);
それかプールをキャッシュして使うこともできます。
Pool pool = PoolManager.AddPool(prefab);
オブジェクトインスタンスを取得
プールからインスタンスを取得する方法は以下の4つが用意されています。
GameObject ins = pool.Get(parent); GameObject ins = pool.Get(position,rotation,parent); var ins = pool.Get<COMPONENT_NAME>(parent); var ins = pool.Get<COMPONENT_NAME>(position,rotation,parent);
オブジェクトを無効化
PoolManagerは非アクティブなオブジェクトを、
未使用のオブジェクトとして認識します。
Destroy(pooledGameObject);//NO NO NO pooledGameObject.SetActive(false);//OK with this!
インスペクター
再生中はプールされたオブジェクトの数が表示されます。
また、インスペクターからプレハブの変更及びプールの追加ができません。
関連記事
mackysoft.hatenablog.com
以下の記事で紹介されたオブジェクトプールをベースにして作りました。
tsubakit1.hateblo.jp