読者です 読者をやめる 読者になる 読者になる

Nobollel開発者ブログ

Nobollelのエンジニアが、UnityやCocos2d-xの旬な情報・技術を紹介します。

PoolManager

みなさん、おはこんばんにちは。
エンジニアの石橋です

今回はPoolManagerの紹介です。

Unityでゲームを作る場合はPrefabにしたオブジェクトを生成、破棄を繰り返す場面が多いと思います。 Prefabの生成と破棄はUnityでは割りと重い処理なので、生成を一度にしたり、一度作ったオブジェクトは破棄せず保持するようなプールシステムを良く作りますがPoolManagerでは基本機能プラスもう少し便利にしたアセットです。

f:id:nobollel:20161220201113p:plain

  1. 適当にオブジェクトを作ります
  2. Pool Nameを設定します。
    これはstatic classのPoolManager.PoolsからSpawnPoolを検索する際のKeyになります。
  3. Pre-Prefab Pool Optionsの右側にある+ボタンを押して追加します
  4. 生成するオブジェクトのプレハブを設定します
  5. 起動後に自動的に生成するプレハブの個数を設定します。
    これはactiveSelfがfalseになっているオブジェクトで生成されます。

生成するにはSpawnを呼び出します。 生成したプレハブを破棄(deactiveに)するにはSpawnの戻り値で受け取ったTransformをDespawnに渡します。

public class Hoge : MonoBehaviour {
    [SerializeField] SpawnPool pool;

    public Transform Spawn() {
        return pool.Spawn( "Cube" );  
    }
    
    public void Despawn( Transform instance ) {
        pool.Despawn( instance );
    }
}

pool.Spawnの引数はプレハブ名を設定していますが、メソッドのオーバーロードでプレハブそのものを指定することも出来ます。
AudioSourceを指定すると再生が終わった場合に自動的にDespawnされます。


生成する個数に制限をかけることも出来ます。

f:id:nobollel:20161220201120p:plain

  1. limit Instancesにチェックをします。
  2. limit Amountに最大生成個数を設定します。
  3. limit FIFOはオプショですが、これにチェックを入れると最初に生成されたものが破棄され、新しく作られます。
    チェックが入っていない場合はpool.Spawnの戻り値がnullになります。

他にも一度に生成すると負荷がかかるので徐々に生成するオプションなどもあります。