ヒキニートがゲームを作るブログ

Unityでゲームを作る過程を投稿します

オブジェクトプール

オブジェクトの生成と破棄を回避する「オブジェクトプール」を作りました。

どんなオブジェクトプール?

個人的に欲しかった機能を盛り込みました。

使い方

まず以下からダウンロード・展開しUnityプロジェクトに入れます。
github.com
f:id:MackySoft:20170517233323j:plain

PoolManagerをシーンに追加

インスタンスを取得すると勝手に生成されるので必ず追加する必要はありませんが、
事前にパラメータを設定しておくこともできます。
f:id:MackySoft:20170517181308j:plain
(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!

インスペクター

再生中はプールされたオブジェクトの数が表示されます。
また、インスペクターからプレハブの変更及びプールの追加ができません。
f:id:MackySoft:20170517181344j:plain

関連記事

mackysoft.hatenablog.com
以下の記事で紹介されたオブジェクトプールをベースにして作りました。
tsubakit1.hateblo.jp