01 前言
大家好,我是98K!五一前,我上架 Cocos Store 的『高性能割草框架』增加 Cocos Creator 2.4.x 引擎,已经支持的老铁可免费更新!
后续的更新计划是:完善2D游戏案例、增加3D案例、支持RVO和群聚,让框架更实用,应用范围更广。
感谢大家的支持,『98K Cocos 技术交流群』开3群了,进群可领取50优惠券,欢迎大家一起交流、学习、共同成长!
最近弹幕,割草非常的火爆,从独立开发吸血鬼幸存者大火,到大赚 10 亿的弹壳特工。
还有后起的成绩喜人的通神榜、土豆兄弟、黎明前20分钟......相信没人能会拒绝,满屏小怪被弹雨突突的击杀的快感,还有超武的爽快激动。
这次在 ChatGPT AI 的加持下,我为大家提供一个支持1000怪同屏,通用高性能2D/3D动态碰撞检测方案。
02 性能测试
在开始介绍之前,我先公布一下性能测试结果,如果你觉得还不够用,那就不浪费时间,继续往下看了。AABB 2D碰撞测试
设置设备:小米10 骁龙865
浏览器:系统自带浏览器
测试数据:2000节点,平均5ms
AABB 3D碰撞测试
设置设备:小米10 骁龙865
浏览器:系统自带浏览器
测试数据:2000节点,平均8ms
2D割草DEMO测试
设置设备:小米10 骁龙865
浏览器:系统自带浏览器
测试数据:400节点,平均2ms
这里是 H5 链接,您也可以在自己设备上测试体验:
http://learncocos.com/rougelike/
下面我再讲讲,具体的碰撞优化思路与ChatGPT给予我的一些帮助,希望能对你有所帮助。
03 技术要点
碰撞系统分为动态和静态两种,不同的情形会使用不同策略。
动态碰撞检测
动态碰撞检测,主要针对运动物体、例如角色、子弹、技能等,基于智能分轴扫掠优化方案,使用了(优化版SAP + OBB等......)适用各种2D/3D、运动物体检测,如:角色、弹幕、子弹、攻击。
静态碰撞检测
静态碰撞检测,主要针对静止物体,例如:场景、物品、障碍等。基于空间静态分割优化方案,使用了(octree + kdtree + gjk + epa等算法) 适用于 3D 世界行走、3D表面行走、边界检测(FPS、MMO、RPG等类型的游戏)。
动态碰撞检测系统组成
AABB 包围盒更新
粗略碰撞算法筛选
最后形状精确碰撞
最近 AI 很火,听说它要来抢我饭碗。我到要看看,能不能先跟他交个朋友,助我实现,上面所说的三件套。
04 ChatGTP 能力加持
先科普一下,这次为什么会挑选 SAP ?因为各大物理引擎都能看它的身影,存在即是理由。
SAP全名:Sweep And Prune,是一种对轴向排序扫掠算法,有种SAT剪枝的味道。
对 X 轴投影可以快速分离排除相交
优点如下:
1. 物体更新快(物体实时更新位置)
由于要对分轴排序,你可能会想到用快排 nlogn。
但是 SAP 有个真正灵魂的地方,由于运动物体相邻帧情况下排序是相对稳定,所以实际中使用插入排序会更快,大部分情况接近 O(n) 的性能,整体上会比nlogn 快很多。
其他树状如四叉、八叉、BVH等算法,更新物体需要调整树结构是消耗成本不低的。
2. 物体间相互检测快(常说的 trigger)
由于使用的是顺序存取结构,读写性能比其他树形结构要高。
同时轻易进行相互 trigger 检测,而且这顺序结构天生就带去重检测功能。
例如:四叉树、八叉树、格子等,这一类多次分割,还要进行去重标记检测,无形增加性能消耗。
3. 支持2D/3D无范围限制 (兼容性)
由于是对轴向排序分割检测,所以不存在空间大小限制,也不受维度的限制,很好的支持全范围的2D/3D 空间检测。
像四叉,八叉,格子,可能会受到空间范围大小限制。
本着人生第一信条,谁提出问题就让谁来解决问题。我决定让 AI 它解决自己抛出的问题。
好家伙,一声音不哼地啪啪啪打起代码来了,感觉流程可以!但是,还是缺少点灵魂,武功心法掌握的是十足,但打起功夫来,还是差了点。
兄弟这不太行啊!看来,老哥我只能循循诱导,给它提起优化建议。
经过一轮交谈,也收集得差不多了。本着个人第二信条对技术负责的态度,在 AI 编写的框架上进行自己的精准的改造。
同时结合自己的优化方式,对 SAP 算法进行了深入的改造,为后面碰撞检测提供最大的效力。
05 AABB与Shape
粗略筛选完成了,成功了一大半,还有两个环节:AABB、Shape 如何实现呢?
1. AABB 包围盒更新
本着个人第三信条,能不动手坚决不动手,于是再次唤醒 AI 起来啪啪啪写代码。
求算旋转后的 AABB,提供给 SAP 筛选。
What? 打住,你给我整 8 个顶点的来算运动中的 AABB,老板看到不得血压爆表,行行行,再好好规劝一下。
好家伙,你是知道得挺多的就是不给我,AI兄弟你这不厚道啊,行行赶紧给我写出代码。
兄弟(看样子快成形了,我心里暗喜,再求求它)再帮忙优化一下,游戏优化飞起,老板看到一开心,就发我薪水啦!!!
行吧,这代码算是到点子上,本着个人第二信条对技术负责,最后优化细节简化由我再进行处理。
这样 AABB 旋转更新完成,可以交付到SAP进行粗略碰撞筛选。
2. Shape形状精确碰撞
目前暂时支持 Box、Sphere 检测(后续会支持其他常用),支持3D旋转操作的碰撞。
所以我们要实现OBB vs OBB 和 OBB vs Sphere 的检测。本着个人第三信条,厚着脸皮再次唤醒了 AI。
Sphere vs Sphere 的碰撞检测,不为难它了
OBB vs Sphere (旋转方体与球体 精确碰撞)有这个检测,只需要把Sphere转到OBB 旋转坐标系下,就可以转化为AABB求交。
OBB vs OBB (旋转方体之间精确碰撞)
本着个人第三信条,再次让AI啪啪啪的工作起来。
本着个人第二信条原则,最后优化细节简化由我再进行处理。
自此,三大件在 AI 的协助下,得到了很好解决。
最后在我的组装修改下,碰撞系统终于运行了起来,AI是可以写代码,但是它不一定完美,需要从业者有一定知识储备,才能更好地发挥它效力。
假以时日,在不断地训练下,和全球广大的知识网库的加持下,它终究会成为那个巨人。
06 小结
今天分享的内容,而非 98K 大佬本人的极限,98K高性能割草框架,未来还会继续迭代更新,内容如下:
增加实用Shape
支持群聚的优化
增加高性能查询
各位老铁们,敬请期待!后续更新免费升级~
如果你对 Cocos 游戏开发、技术、变现感兴趣,欢迎加晓衡微信:z6346289。
往期精彩
CocosStore卖家成长指南
Creator 3.x 入门修炼指南
用ChatGPT做一款二次元卡牌游戏
坚持做一个长期主义者
一个公式35岁让自己过的越来越好!
《我的世界》体素类游戏完整解决方案!