AndroidやIOSはメモリ管理が大変らしい。
不足すると問答無用で落ちるし、評価もガタ落ち。良いことない。
なので、多少緩和するAssetsを使ってみる。
で、【Swarm Object Manager】が4月8日まで無料なので、さっそくDLして使ってみた。
■デモ
実際使ってみたデモは【こちら】
デモでは生成したオブジェクトにユニークな名前が概ね違う名前が割り当てられているので、
再利用時にわかりやすいと思う。
(命名とカウントのところがスレッドセーフじゃなかったんで、ユニークじゃなかった)
スクリプトの内容はこんな感じ
・ストックは1秒間使用されなかったら削減(全体の2割まで)。
・オブジェクトの生成数に制限は無し。
・アクティブなオブジェクトは5秒後に破棄(ストックする)
■Swarm Object Managerとは
Swarm Object Managerは、生成したオブジェクトをリサイクルして
効率的に運用するためのオブジェクトマネージャー。
削除するオブジェクトは一時ストックし、オブジェクト実行時はストックから再利用する。
使ってみた感じ、オブジェクトの生成速度が破棄と同程度になると、
ほとんどオブジェクトをインスタンス化せずに使用できる。
射撃の弾だけでなく、エフェクトやMOB等、頻繁に作成・削除するものは、
こういった機能を使って管理するのが良さ気。
■知っておくべきこと
便利な機能だけど、色々と面倒な処理が必要になる。
1.再利用するオブジェクトはSwarmItemを継承しないといけない。
2.StartやAwakeメソッドが実行されない。(OnStateChangeを利用する)
3.DestroyではなくKill(SwarmItemのメソッド)を利用する。
4.オブジェクトのパラメータは自分で初期化しないといけない。
特に4番の初期化されないのは面倒で、rigidbodyの落下速度が最初からMAXだったりする。
使い方は【こちら】。