オブジェクトプール
オブジェクトプールは、プレハブ(元となるオブジェクト)のインスタンスを使いまわすことで高負荷なインスタンス化/破棄の回数を削減するための機能です。
概要
- 元となるオブジェクトをキーにしてプールに格納/取り出しを行う
- プールに格納中のGameObjectは非アクティブ化しDontDestroyOnLoadシーンに移動する
- ライフタイムの設定に従って、不要と判断された時に破棄される。
- プールから取り出されたGameObjectはアクティブ化し現在のアクティブシーン(あるいは指定したオブジェクトの子)に移動する。
事前にプールへ格納
事前にプールへ格納するにはAdvancedPoolingを使用します。
AdvancedPoolingは非同期でインスタンス化とプールへの格納を行います。
大量のインスタンス化を行うため高負荷になりますので、ローディング画面などで行うと良いでしょう。
プールから取り出し
プールから取り出すにはInstantiateGameObjectを使用します。
Use Poolをオンにすることで、プールに格納されているインスタンスをアクティブ化して使いまわします。
プールが空だった場合は新規にインスタンス化します。
なお、Use Poolをオフにした場合は通常通りインスタンス化します。
プールに格納できるようあとから変更はできません。
プールに格納
プールに格納するにはDestroyGameObjectを使用します。
InstantiageGameObjectを使用してプールから取り出したGameObjectのみ格納できます。
元からシーンに配置してあったオブジェクトやプール管理外のオブジェクトは通常通り破棄されます。
ライフタイム
プールに格納されたオブジェクトは時間経過などで不要と判断されたときに破棄されます。
詳しくは、LifeTimeFlagsを参照してください。
IPoolCallbackReceiver
プールから取り出し/格納したときのコールバックを受け取れるインターフェイスです。
取り出したときに状態を初期化する際に、元となるGameObjectにこのインターフェイスを実装したコンポーネントを設定してください。
詳しくはIPoolCallbackReceiverを参照してください。