コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】シンプルなオブジェクトプールを実現する「Prototype」紹介

はじめに

「Prototype」を使用することで、オブジェクトプールを簡単に実現することができます

使い方

例えば、下記のような自機を管理するクラスと

using UnityEngine;

public class MyShip : MonoBehaviour 
{
    public Prototype m_prototype;

    private void Update()
    {
        if ( Input.GetKeyDown( KeyCode.Z ) )
        {
            m_prototype.Instantiate<Shoot>();
        }
    }
}

次のような弾を管理するクラスを用意して

using UnityEngine;

public class Shoot : MonoBehaviour 
{
    private void Awake()
    {
        GetComponent<Prototype>().OnReturnToPool += OnReturnToPool;
    }

    private void Update()
    {
        if ( Input.GetKeyDown( KeyCode.X ) )
        {
            GetComponent<Prototype>().ReturnToPool();
        }
    }

    private void OnReturnToPool()
    {
        Debug.Log( "OnReturnToPool" );
    }
}

そして、下記のようにオブジェクトを用意して

f:id:baba_s:20171021200916p:plain

f:id:baba_s:20171021200925p:plain

この状態でゲームを起動して、Z や X キーを押すことで
オブジェクトプールが正常に動作していることが確認できます

f:id:baba_s:20171021201137g:plain

また、生成したオブジェクトを無効化した時に
登録したコールバック関数が呼び出されてログが出力されていることも確認できます

f:id:baba_s:20171021201254p:plain

参考ツイート

関連記事