关于unity 过多碰撞器集群触发而导致卡顿原因及解决方法

unity 过多碰撞器集群时产生的卡顿原因与解决方法

在使用unity 3d制作游戏的时候,大部分情况发我们无论在Npc,还是Player上挂载很多不同功能的碰撞器,例如在射击类游戏中,当玩家走过去,需要一个检测是否进入寻找范围的碰撞器,同时,我们需要一个检测是否进入攻击范围的碰撞器,当然还需要一个是否自己被攻击的碰撞器,这样在Npc上就挂载了3个碰撞器。
1:当Npc集群时候,造成卡顿的原因
大部分时候我们利用再Npc下挂载3个空物体,然后把碰撞器挂在不同空物体上,然后利用tag,脚本就能自动检测到是触发了哪个碰撞器,当物体很少的时候,这样做是没有问题的,
但是当Npc大批量集群出现的时候就会产生很大问题。
由上面一个Npc上就要挂载3个碰撞器,假设,我们利用原型模式,建立一个MonsterFactory进行大批量生产怪物的时候,当怪物堆积到一定程度,我们再去触发,怪物会疯狂跟踪并攻击你,怪物少的时候你可能只会觉得有一点卡,但是当怪物很多的时候,就会出现卡顿,FPS会掉的很厉害,画面十分的卡。这里可能有的小伙伴觉得是电脑的问题,但是现在的电脑应该完全能带的动,开发过程中涉及到的空间运算也很平常。所以问题应该不是出现在这里。
unity有自带的profiler,就是ctrl+f7就能看到哪一块出占用时间最长,博主惊奇的发现,是大量的碰撞器被触发了,没进行优化前,每一秒大概有30W次TriggerStay被触发,27W次的ComparTag被使用。
我们先进行简单的数学分析,当物体不是很多且空间较大的时候,我们的物体挂载的碰撞器基本很小概率会被触发,但是当物体成集群的时候,一个挨着一个,假设有n个Npc,那就会产生C(3*n)2=1/2*3n*(3n-1)次触发,基本相当于平方级的增长,这是非常恐怖的,如果有100个Npc扎堆,理论上每一秒(帧率60)就会有60*1/2*180*179=1933200次的碰撞检测(这里假设是3个碰撞器范围一样大,理想情况下),里面又包括海量的Compar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值