Unity で Instantiate・Destroy を抑制する
カテゴリ:unity
銃弾やモブなどの使い捨てのオブジェクトはプレハブにしておき、必要に応じて Instantiate() するのが簡単だ。そして不要になったら Destroy() で破棄する。
しかしこの方法は無駄が多い。Instantiate()、Destroy() するたびに ガーベジコレクション(以下 GC)が動作する恐れがある。さらに生成・破棄が頻繁に起こると GC1回あたりの動作が長くなる。
そこでシーンのロード中に、そのシーンで必要になる最大数のオブジェクトをあらかじめ作成しておく。そして必要になったとき再初期化して、それを再利用する。こうすれば Instantiate()、Destroy() を呼ぶことはなくなり、これらによって引き起こされる GC をなくせる。
Unity 2021 以降は UnityEngine.Pool が使えるので以下のコードを自分で書く必要はない。