ccc碰撞系统的一个小坑
公司用ccc引擎写一个H5的捕鱼游戏,子弹和鱼的碰撞发生了一些问题,只有非常低的几率会触发碰撞回调,大多数碰撞都被无视了.
我检查了所有的子弹和鱼的预制资源,都已经正确分组,并且加了碰撞组件,碰撞框也正常,组件中也都有回调方法,并且屏蔽了方法中所有的代码,只是在碰撞时会打印一下,但依旧是不触发.
就当我绝望的一遍遍尝试的时候,突然发现,只有在鱼添加到场景之前,添加到场景的子弹才会和鱼发生碰撞,而之后添加的子弹就不会发生碰撞.
于是我立即就想到了node组件中的group.
//原来的group中的顺序
group0: fish
group1: bullet
//修改后的
group0: bullet
group1: fish
修改后,果然所有的子弹和鱼都能正常发生碰撞了.
这个问题是不是很眼熟?js中用for(let i in array){}时,如果逻辑顺序不对,很容易就发生这种问题,新加入的不会被遍历到,同理还有c++中的容器.
我猜想,ccc中的碰撞系统可能就是用类似的语句进行遍历,而遍历的顺序就靠node组件的group来控制,所以,才会发生上面这种情况.
所以,如果你用ccc碰撞系统时,发现其他一切都正常,但碰撞就是不会触发的时候,检查一下你group的分组吧,说不定你就是被这个坑了.