「Master Object Pooler 2」を利用して簡単にObject Poolを実装する

Master Object Pooler 2 は簡単にObject Poolを実装してくれるMITのアセットです.

github.com

Object Pool とは

InstantiateとDestroyは処理が重い.
生成と破棄を繰り返す場合にコストを減らすようにするのが,Object Pool デザインパターン
リサイクルをイメージする.

doruby.jp

準備

2018.3 から 2019.2 まで

Packages/manifest.jsondependenciesに以下のように付け足す.

"com.qfsw.mop2": "https://github.com/QFSW/MasterObjectPooler2.git"

再度Unityエディタに戻ると内部で処理してくれる.

2019.3 から

後日付け足す.

使い方

Create -> Master Object Pooler 2 -> Object Poolで Object Pool のテンプレートを作る.

f:id:xrdnk:20200506235808p:plain

f:id:xrdnk:20200506235907p:plain

以下のような感じでスクリプトを作る.
生成する場合はObjectPool.GetObject()を,破棄する場合はObjectPool.Release()を呼び出せばよい.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Master Object Pooler 2 利用時に必要な宣言
using QFSW.MOP2;

public class ObjectPoolTest : MonoBehaviour
{
    // オブジェクトプールテンプレート
    public ObjectPool m_pool;

    private void Update()
    {
        // スペース押下時にプレハブ生成
        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine(CreateObject());
        }
    }

    private IEnumerator CreateObject()
    {
        // オブジェクトプールからオブジェクトを生成する
        var position = Vector3.zero;
        var newObject = m_pool.GetObject(position);
        
        // 1秒後に生成オブジェクトをオブジェクトプールに戻す
        yield return new WaitForSeconds(1);
        m_pool.Release(newObject);
    }
}

スペースを押せば,プレハブが生成される.

f:id:xrdnk:20200507000136g:plain

参考記事

Object Poolを簡単に実装できないか調べたらこちらの記事が出たので自分でもやってみました.

baba-s.hatenablog.com