注意右上角的Hierarchy面板中的对象生成与销毁时通过激活与非激活实现的, 替代了频繁的生成实例与销毁,
对象池优化前言
我们都知道在游戏中,如果我们想使用一个对象,第一步就是New一个对象出来,那么在Unity中是如何处理这些对象的呢,一般要游戏中,如果某一个对象跟其他的任何对象都没有关联,我们就可以认为这个对象是垃圾对象,是占用内存空间的,而在C#中有自己的处理垃圾内存的方式——CG垃圾自动回收机制,在垃圾自动回收机制处理垃圾之外还有一种方式是析构法来处理垃圾。
但是如果频繁的创建销毁对象,对CPU的运算消耗是相当大的,比如在制作FPS类型的游戏时,某种机枪可能一秒数十发的子弹,甚至在某些情况对象在瞬间的生成和销毁的数量将会十分恐怖,如果极为恐怖的数量不断的被生成和销毁,那么就会对性能的消耗将会十分恐怖,导致游戏卡顿甚至闪退。
一个设备影响游戏开发的硬件也就CPU、GPU和内存,我们可以针对这些硬件的有效利用,和降低运算速率来入手。
而对象池就是针对大量相同的对象重复调用,避免大量对象的生成销毁而存在的。
对象池原理
通过集合的方式来存入生成的对象作为对象池,不断调用这个集合里的对象,通过将这些对象不断设为激活与未激活的方式即可。
将会用到两个集合:
游戏对象池结构:Dictionary<string, List<GameObject>> -->通过键值对的形式可以获取到存在集合中的对象
预制体资源结构:Dictionary<string, GameObject>