2016/06/21
概要
UnityのInstantiateはだいぶ処理が重いので、Update内では呼ぶべきではないけど、Start時にたくさん生成しておいて、順番に使うのは実装するのが面倒だったりする。
と悩んでいたところで、ObjectをPoolするという概念があることを知りました。
公式でもObjectPoolの概念はあったけど、参考にしたのはこのあたり。困ったときのテラシュールブログ様です。
これで解決だけど、こんなんも作ってみたよってことでご紹介。
OjectPool.cs
使い方
- ObjectPoolクラスをnewする。引数でpoolしたい個数、初期のposition, 初期のscaleを渡しておく。
- pool.Poolの引数で、親のgameobject, poolしたいobject, poolする個数を指定。
- poolしたobjectを使用するときは、var go = pool.Instantiate()のような感じ。
まとめ
ObjectPoolという概念は、ゲームが一通り完成した後、パフォーマンスの最適化で必要かなーと思います。最近知りましたが。。
とりあえず作ってみたよーというレベルなので、適宜書き換えてご活用ください。これがあれば、Update内でGameObjectをInstantiateするような部分はなくせるのではないかと思います。
Instantiateは予想以上に重い処理なので、カクつく場合はProfilerで見たりして、どこがボトルネックになっているかを確認すると良いかと思います。