在游戏行业,我们如果想要混的更好,就必须要不断的学习,提升自己的实力,这样我们的能力才能得到体现,工资才会涨。那么我们从初级到中级乃至后面的高级甚至是主程,所需要具备对应的不同能力,那么我们从最基础的初级开发人员要过渡到中级开发人员,所需要具备的东西有很多,那么对象池技术就是这其中一种,是优化手段的一种。大家都知道我们玩游戏,就是享受玩的乐趣,体验,那么一款游戏如果让人体验很差,就不能算一款好的游戏,所以我们需要把我们的游戏优化到极致。如果可能的话。让用户体验极好,那么这才是我们作为游戏开发人员的成就。废话不多说,直接进入主题。
那么什么是对象池技术呢?百度上也有说,那么在这里我说下我个人的理解:对于游戏中需要反复利用或者生成,销毁的游戏物体,我们如果直接就创建或者销毁,那么会产生内存碎片,久而久之,我们的游戏性能就会下降,那么我们是不是可以弄一个容器,把需要的销毁的游戏物体放进这个容器,然后当需要用到这种游戏物体的时候,我们再从容器里面拿出来,这样就不用重新创建了,就节约了内存资源。这是我个人对对象池技术的理解。那么哪些地方需要用到对象池技术呢?比如我们的FPS游戏里面的子弹,敌人,就可以做成对象池。那么我们怎么做对象池呢?很多人都说用链表做对象池,一个生成池,一个死亡池。这样可以的,我们不仅可以用链表,队列,字典都可以实现。那么今天我给大家带来的是队列对象池。在这之前你需要会使用最基本的设计模式---单例模式。
首先进入unity创建场景,然后我们已飞机大战为背景,那么我们今天做的就是子弹的对象池。先把准备工作做好,飞机的制作,子弹预制体的制作,滚动背景的制作等等。然后在飞机上挂载一个对象池脚本,一个发射子弹脚本。如图:
![8f1225718b716b9319c5d96a0b1f1240.png](https://img-blog.csdnimg.cn/img_convert/8f1225718b716b9319c5d96a0b1f1240.png)
然后我们编写对象池脚本,飞机发射子弹的很简单,就用一个unity自带的延时函数就可以了。对象池脚本内容如图:
![dcc1f08638076e204345011248d70692.png](https://img-blog.csdnimg.cn/img_convert/dcc1f08638076e204345011248d70692.png)
![169375c509c2fa2b337fff41f275c70a.png](https://img-blog.csdnimg.cn/img_convert/169375c509c2fa2b337fff41f275c70a.png)
这样我们的对象池的功能算是写完了,那么怎么用它呢?我们只要在飞机发射子弹的时候,不用寻常的实例化函数,用我们对象池的生成方法就可以了,上图:
![9755fb4ab517eabe444d24bcb2bbb819.png](https://img-blog.csdnimg.cn/img_convert/9755fb4ab517eabe444d24bcb2bbb819.png)
然后销毁子弹我们不要用destroy,我们也用对象池专门的”销毁”方法。如图:
![fe1b282db06a4488bbffb6ee60d392a3.png](https://img-blog.csdnimg.cn/img_convert/fe1b282db06a4488bbffb6ee60d392a3.png)
然后我们可以看到,不管你发射多久子弹,它依旧是那几颗子弹轮流使用,如图:
![9fbf8bf73e54c81e85c10f2dc309438c.png](https://img-blog.csdnimg.cn/img_convert/9fbf8bf73e54c81e85c10f2dc309438c.png)
大家可以自己复制我的代码尝试。