续ShaderEditor、Inspector之后又一成功爆品,2周260+单!

01 前言

大家好,我是98K!五一前,我上架 Cocos Store 的『高性能割草框架』增加 Cocos Creator 2.4.x 引擎,已经支持的老铁可免费更新!

后续的更新计划是:完善2D游戏案例、增加3D案例、支持RVO和群聚,让框架更实用,应用范围更广。

19183a97144c12bd2b8410a454005ef1.png

感谢大家的支持,『98K Cocos 技术交流群』开3群了,进群可领取50优惠券,欢迎大家一起交流、学习、共同成长!

34aa7580fef99f7fe4e0e4d22c7ab1a0.gif

最近弹幕,割草非常的火爆,从独立开发吸血鬼幸存者大火,到大赚 10 亿的弹壳特工。

9a81c69d5949b8e00e16800f6db8d8aa.gif

还有后起的成绩喜人的通神榜、土豆兄弟、黎明前20分钟......相信没人能会拒绝,满屏小怪被弹雨突突的击杀的快感,还有超武的爽快激动。

6a80da7c56236b7bd56982945d75a5f9.gif

这次在 ChatGPT AI 的加持下,我为大家提供一个支持1000怪同屏,通用高性能2D/3D动态碰撞检测方案。

f765c87503fcdfc185bd252f1de05b02.gif

02 性能测试

在开始介绍之前,我先公布一下性能测试结果,如果你觉得还不够用,那就不浪费时间,继续往下看了。
AABB 2D碰撞测试
ef5d57b9a65c1c86e3210495eb543b39.png
  • 设置设备:小米10 骁龙865

  • 浏览器:系统自带浏览器

  • 测试数据:2000节点,平均5ms

AABB 3D碰撞测试
6aac48642c3d35c9cff184ddfb61e493.png
  • 设置设备:小米10 骁龙865

  • 浏览器:系统自带浏览器

  • 测试数据:2000节点,平均8ms

2D割草DEMO测试
5abdfe15b952360114496c5994cd66a1.png
  • 设置设备:小米10 骁龙865

  • 浏览器:系统自带浏览器

  • 测试数据:400节点,平均2ms

这里是 H5 链接,您也可以在自己设备上测试体验:
http://learncocos.com/rougelike/

下面我再讲讲,具体的碰撞优化思路与ChatGPT给予我的一些帮助,希望能对你有所帮助。

03 技术要点

碰撞系统分为动态和静态两种,不同的情形会使用不同策略。

动态碰撞检测

动态碰撞检测,主要针对运动物体、例如角色、子弹、技能等,基于智能分轴扫掠优化方案,使用了(优化版SAP + OBB等......)适用各种2D/3D、运动物体检测,如:角色、弹幕、子弹、攻击。

静态碰撞检测

静态碰撞检测,主要针对静止物体,例如:场景、物品、障碍等。基于空间静态分割优化方案,使用了(octree + kdtree + gjk + epa等算法) 适用于 3D 世界行走、3D表面行走、边界检测(FPS、MMO、RPG等类型的游戏)。

动态碰撞检测系统组成
79fa0935dfe4fb547b86b019facb2d9e.png
  1. AABB 包围盒更新

  2. 粗略碰撞算法筛选

  3. 最后形状精确碰撞

最近 AI 很火,听说它要来抢我饭碗。我到要看看,能不能先跟他交个朋友,助我实现,上面所说的三件套。

04 ChatGTP 能力加持

先科普一下,这次为什么会挑选 SAP ?因为各大物理引擎都能看它的身影,存在即是理由。

SAP全名:Sweep And Prune,是一种对轴向排序扫掠算法,有种SAT剪枝的味道。

4c0f5a8d3d7a5915f8c42ee049b9d651.png

对 X 轴投影可以快速分离排除相交

f37e6bdd72aee8dbfa9fc728c9bf170b.png

优点如下:

1. 物体更新快(物体实时更新位置)

由于要对分轴排序,你可能会想到用快排 nlogn。

但是 SAP 有个真正灵魂的地方,由于运动物体相邻帧情况下排序是相对稳定,所以实际中使用插入排序会更快,大部分情况接近 O(n) 的性能,整体上会比nlogn 快很多。

其他树状如四叉、八叉、BVH等算法,更新物体需要调整树结构是消耗成本不低的。

2. 物体间相互检测快(常说的 trigger)

由于使用的是顺序存取结构,读写性能比其他树形结构要高。

同时轻易进行相互 trigger 检测,而且这顺序结构天生就带去重检测功能。

例如:四叉树、八叉树、格子等,这一类多次分割,还要进行去重标记检测,无形增加性能消耗。

3. 支持2D/3D无范围限制 (兼容性)

由于是对轴向排序分割检测,所以不存在空间大小限制,也不受维度的限制,很好的支持全范围的2D/3D 空间检测。

像四叉,八叉,格子,可能会受到空间范围大小限制。

3c3b2843bf16f90857cc1acc52aaa8f3.png

本着人生第一信条,谁提出问题就让谁来解决问题。我决定让 AI 它解决自己抛出的问题。

73314a04bbd87991c251edd638741b7b.png

好家伙,一声音不哼地啪啪啪打起代码来了,感觉流程可以!但是,还是缺少点灵魂,武功心法掌握的是十足,但打起功夫来,还是差了点。

兄弟这不太行啊!看来,老哥我只能循循诱导,给它提起优化建议。66534680c72789c822b5e6b35338844d.png

经过一轮交谈,也收集得差不多了。本着个人第二信条对技术负责的态度,在 AI 编写的框架上进行自己的精准的改造。

同时结合自己的优化方式,对 SAP 算法进行了深入的改造,为后面碰撞检测提供最大的效力。

05 AABB与Shape

粗略筛选完成了,成功了一大半,还有两个环节:AABB、Shape 如何实现呢?

1. AABB 包围盒更新

本着个人第三信条,能不动手坚决不动手,于是再次唤醒 AI 起来啪啪啪写代码。0da169313c40772d44d46460e5e927f5.png

求算旋转后的 AABB,提供给 SAP 筛选。c7879a6286971edbdc1dc03ceb1c8b7f.png

What? 打住,你给我整 8 个顶点的来算运动中的 AABB,老板看到不得血压爆表,行行行,再好好规劝一下。ccb30ac7a30f9a4d2e83aa33732dba4e.png

好家伙,你是知道得挺多的就是不给我,AI兄弟你这不厚道啊,行行赶紧给我写出代码。

兄弟(看样子快成形了,我心里暗喜,再求求它)再帮忙优化一下,游戏优化飞起,老板看到一开心,就发我薪水啦!!!e3d80543d2110eedc44e1d925f39ab45.png

e9e9b0d1d2e8e51edfc2d73509f28bee.png

行吧,这代码算是到点子上,本着个人第二信条对技术负责,最后优化细节简化由我再进行处理。

这样 AABB 旋转更新完成,可以交付到SAP进行粗略碰撞筛选。

2. Shape形状精确碰撞

目前暂时支持 Box、Sphere 检测(后续会支持其他常用),支持3D旋转操作的碰撞。

所以我们要实现OBB vs OBB 和 OBB vs Sphere 的检测。本着个人第三信条,厚着脸皮再次唤醒了 AI。

  1. Sphere vs Sphere 的碰撞检测,不为难它了

  2. OBB vs Sphere (旋转方体与球体 精确碰撞)1d16c34c42ffb4c3455c2ad674dc2660.png有这个检测,只需要把Sphere转到OBB 旋转坐标系下,就可以转化为AABB求交。

  3. OBB vs OBB (旋转方体之间精确碰撞)8524b33dd45210d836e0b57edc0b13ef.png

本着个人第三信条,再次让AI啪啪啪的工作起来。8e9f30b3a772c8352f39ea47adfde5dc.png

本着个人第二信条原则,最后优化细节简化由我再进行处理。

自此,三大件在 AI 的协助下,得到了很好解决。

最后在我的组装修改下,碰撞系统终于运行了起来,AI是可以写代码,但是它不一定完美,需要从业者有一定知识储备,才能更好地发挥它效力。

假以时日,在不断地训练下,和全球广大的知识网库的加持下,它终究会成为那个巨人。

06 小结

2e7fa16f81548318a0604b6502eb0ac3.png

今天分享的内容,而非 98K 大佬本人的极限,98K高性能割草框架,未来还会继续迭代更新,内容如下:

  • 增加实用Shape

  • 支持群聚的优化

  • 增加高性能查询

各位老铁们,敬请期待!后续更新免费升级~ 

如果你对 Cocos 游戏开发、技术、变现感兴趣,欢迎加晓衡微信:z6346289。

往期精彩

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值