分享个2.1实现的3D简易物理碰撞实现

最近整理代码,由于Cocos3D即将推出,在这把很久之前实现的碰撞分享一下。基于2.1.x

设计目的:满足基本3D碰撞检测,兼顾微信小游戏性能,tag分组。
方案:为性能考虑使用AABB碰撞盒,忽略旋转、碰撞反弹、阻尼,碰撞后仅进行边界修正。这样就基本满足60帧做个3D跑酷、跳跃之类的小游戏了。

思路是:根据force+重力计算下一帧位置>计算是否碰撞>是则判断方位并计算边界修正位置,否则直接应用位置。有更好的思路欢迎留言:clap:


实现是很简单的AABB算法,只要理解min最近点,max最远点这两个坐标即可。

以下是判断方法,官方引擎里有2D的实现代码,这里加上z轴就好了。

写的组件,基本模仿Unity,抛出事件也是onCollisionEnter/Stay/Exit(把山寨进行到底。。)

最后吐槽一下官方很多API还是2D,取世界坐标要自己算,珍爱生命大家还是等Cocos3D吧:smile_cat:

2赞

Cocos3D还需要一段时间打磨完善才行,目前缺少的东西还是太多了:joy:

mark

你好,可以给一份参考demo吗,我发现我这边无法实现z轴的碰撞

你好,先打印z轴看看有没有数据,是不是没切3D节点。ps现在官方版本不错了,直接用官方好了。

你好,我是其他方面要用到这个知识。AABB里面的坐标怎么设置?

你好,抱歉很少上论坛。AABB实质是一个Node上的组件,Node的坐标就是碰撞盒的中心坐标,AABB的max/min都是基于中心坐标设定值,例如min.x = node.position.x + 10。不知道是不是你问的意思。