U3D游戏开发框架(六)——对象池

一:目的

内存管理是软件开发中重要的一项,在游戏中,有一些需要频繁创建和销毁的对象,例如射击游戏中的子弹,跑酷游戏中的障碍物等,通常的方法是使用Instantiate和Destroy,不断的开辟和释放内存,但是这样的操作是致命的,会产生内存碎片

什么是内存碎片:内存碎片意味着在堆中的空余空间被打碎成了很多小的内存碎片,而不是大的连续内存块,总共可用内存也许很大,但是最长的连续空间可能很小很小
例如下图所示,假设我们最后还有20个空余字节,但是被一块正在使用的内存O2分割成了两部分,这时我们尝试分配15字节的对象就会失败,最终导致游戏崩溃

U3D游戏开发框架(六)——对象池

所有我们可以定义一个池对象,其中包含了一组可重用的对象
当需要新对象时,向池子要一个,如果池子中没有此对象,就Instantiate一个,如果池子中存在此对象,则直接SetActive=true
当需要销毁时,不使用Destroy,直接SetActive=false并放回池子
通过这种方式可以轻易地创建和销毁对象而不必分配内存或其他资源


二:解决的问题及优点

——避免分配内存和释放内存产生的内存碎片导致的游戏崩溃


三:使用

——将所有预制体文件统一放在Resources文件夹下的Prefabs文件夹下
——每个对象池物体的脚本继承BasePoolObject类,并实现OnSpawn和OnUnSpawn方法,重写Reset方法
——使用ObjectPoolMgr.Ins.XXX


四:代码实现

来源:Hello Bug.

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年3月7日
下一篇 2021年3月7日

相关推荐