dskjal
広告
広告

Unity で Instantiate・Destroy を抑制する

カテゴリ:unity

銃弾やモブなどの使い捨てのオブジェクトはプレハブにしておき、必要に応じて Instantiate() するのが簡単だ。そして不要になったら Destroy() で破棄する。

しかしこの方法は無駄が多い。Instantiate()、Destroy() するたびに ガーベジコレクション(以下 GC)が動作する恐れがある。さらに生成・破棄が頻繁に起こると GC1回あたりの動作が長くなる。

そこでシーンのロード中に、そのシーンで必要になる最大数のオブジェクトをあらかじめ作成しておく。そして必要になったとき再初期化して、それを再利用する。こうすれば Instantiate()、Destroy() を呼ぶことはなくなり、これらによって引き起こされる GC をなくせる。

Unity 2021 以降は UnityEngine.Pool が使えるので以下のコードを自分で書く必要はない。

コンテナの実装例


広告
広告

カテゴリ