浅谈Unity中的缓冲池机制

本文探讨Unity中的缓冲池技术,旨在减少CPU运行压力。通过举例弓箭手连续射箭,指出连续使用Instantiate和Destroy的弊端,提出先克隆再循环利用的游戏物体管理策略。文章介绍了使用Queue作为缓冲池实现“出队”和“入队”的方法,以及如何通过PlayerController和Bullet脚本来控制子弹的生命周期,实现子弹的自动移动和回收,从而优化游戏性能。
摘要由CSDN通过智能技术生成

每当写博文的时候,首先想到的不是该如何写,而是
先注明:大神勿喷,不喜勿喷,欢迎拍砖,而且是狠狠的拍,不狠拍不罢休!!! 嘿嘿。。。

ok!!!我们废话不多说了,直接奔入正题。
如题,我们今天就来讲讲在Unity中的缓冲池技术,那好了,在讲一个技术或者说知识点之前, 我们需要带着一些疑问去学习,才会有动力学下去,至少我们这么认为,先知道要干什么,才能知道怎么干。对吧!!!ok,首先我们要知道的是什么是缓冲池技术,其次是我们为什么要使用缓冲此技术,再者是缓冲池技术能运用到哪些地方。明白了这三点,我相信你会对缓冲池技术有一个基本的认知。

那么我们继续,缓冲池,缓冲池,如名字,有没有读者可以联想到什么,没错,就是起到一个缓冲的作用,当然,这个只是通俗的这么说,本质上是减缓CPU运行压力。大个比方:在unity中一个游戏场景中,你的主角是曹操手下的一位弓箭手,正当诸葛亮来草船借箭的时候,曹操一声令下,万箭齐发,好了,当然,作为每一位弓箭手,他一次只发一只弓箭出去,但是,他是连续的发,比如说就连续不断的射出500只弓箭。看到这里,我们一般在unity里的实现方式就是,当按下某个按键的时候,就Instantiate出来一个,即克隆出来一个,然后在某个时间将之Destroy掉 。这也是最容易想到的方式,但是,就是因为是最容易的,所以才是问题最大的。为什么这么说?请听我一 一道来

我们知道,Instantiate本质上就是分配一块内存区别,用于存储一个游戏物体对象,那么好了,假如你的游戏场景不大,使用Instantiate也算凑合用,那如果你的游戏场景中不单单一个弓箭手,而有很多,每一个弓箭手又可以发出无限制的弓箭(这个我们平常玩的射击游戏是一样的,比如CF),在此情况下,若还是不断的使用Instantiate克隆,使用Destroy销毁的话,可想而知,CPU运行的压力是有多大,内存在不断的分配与释放,对吧。。。相信,讲到这里,很多读者应该就能明白Instantiate的局限性。那么,问题出现,该如何解决呢???? 思考一下,来瓶绿叶凉茶。。。。。 嘻嘻~

ok,那有的读者会不会想,既然不断的 Instantiate不行,那我可不可以先Instantiate一部分,比如10把弓箭,然后循环利用这10把弓箭。。。

perfect, you are right。最核心的思想就是这样,一句话而已,但是,不要小看这一句话,它包含了很多内容, 提取关键字:”先克隆”,”再循环”.那么,如何做到这两个步骤 我们下面讲,在这之前还得阐述一个问题, 就是:会不会有的读者说 弓箭都射出去了,我还能那的回来麽。哈哈,有这样的想法的读者,看来是已经沉浸在我上边描述的场景当中了,没错,现实中是”开弓没有回头箭”,可是,我们这是游戏,游戏都是骗人的,哈哈,没有黑游戏的意思哦,有接触过游戏的读者就会知道:我们游戏中活泼乱动的主角,有可能仅仅是由一张图片做成,游戏中华丽丽的背景,也可能仅仅是三两张图片的循环拼接而已(2D游戏),所以想要在游戏中实现”开弓有回头箭”是一件很容易的事情,只需要设置一下游戏物体的position就好了,对吧!!!所以,有的时候,我们不能带着现实中的想法去思考游戏.

ok,那么我们继续,那么,我们现在就讲讲”先克隆”,”再循环”的实现了,那么,这六个字,其实还藏有玄机,为什么这么说呢,你看,先克隆,那克隆出来的游戏物体需不需要存放在一块内存区域???想想,如果不存放,从何而谈循环。所以,是需要一块内存区域来存放”先克隆”出来的游戏物体,再者看,有了存储区域,我们需不需要实现将物体移出该内存区域的方法和将物体放入该内存区域方法???再次想想,对于这一点,我个人觉得是可有可无,因为,就犹如上边所说的,我们只需要设置物体的position就可以达到循环使用的目的,所以,我个人使用了两种方式来实现缓冲池,不过,我在这里只提一种也就是比较标准的一种缓冲池结构,这也就意味着会包含以上两点,因为,如果没有移出和放入这两个操作,在逻辑上我们显得有点混乱,因为,弓箭是有射出去的,射出去之后在一定的条件下我们又将之拿回来或者说

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值