【Early Access】基于 Cocos Creator 3D v1.1 扩展的物理体验版本

基于 Cocos Creator 3D v1.1 扩展的物理体验版本

目前Cocos Creator 3D v1.1中已经接入了cannon.jsammo.js物理引擎,这些引擎提供了很多的功能特性,为了让大家可以体验到更多的物理功能,同时也为了满足更多的项目需求。我们在v1.1版本上,通过自定义引擎、组件脚本封装等方式提供了多种体验性质的功能组件。

注:部分文件链接到了码云,所以可能需要先登录码云账号才可以下载文件

功能列表

本次提供的抢先体验功能:

新增碰撞体

  • 圆锥碰撞器 cone collider
  • 平面碰撞器 plane collider
  • 简单碰撞器 simple collider
  • 地形碰撞器 terrain collider
  • 网格碰撞器使用凸包近似的功能(由convex进行开关,仅ammo支持)

新增物理材质特性(仅ammo支持)

  • 滚动摩擦系数rolling friction
  • 自旋摩擦系数spinning friction

新增刚体\碰撞特性(仅ammo支持)

  • 连续检测功能ccd
  • 角色控制器脚本character controller

部分展示

  • 连续检测功能

  • 地形碰撞器

  • 角色控制器和地形碰撞器

注:以下为动态图,需要登陆码云才能看到

功能介绍

  • 圆锥碰撞器
    由半径radius、高度height、方向direction组成,用于圆锥体的碰撞检测和运行模拟,支持动力学刚体。

  • 平面碰撞器
    由法线normal、沿法线方向的距离constant组成,用于无限静态平面的碰撞检测,只可以是静态的。此形状相对于box地面,性能更好。

  • 简单碰撞器
    由形状类型simple shape type和四个点vertex0-3组成,用于点、线、三角形、四面体的碰撞检测和运动模拟,支持动力学刚体。

  • 地形碰撞器
    由地形资源terrain asset组成,用于地形的碰撞检测,只可以是静态的。此形状比网格性能更好,并且在cannon.js后端中,此形状支持更加完善和稳定。

  • 网格碰撞器使用凸包近似的功能
    网格碰撞器上的convex属性,开启后,将会用近似凸包去包围网格,支持动力学刚体。

  • 连续检测功能
    考虑到很多用户需求子弹的物理特性,希望刚体速度过快时不会发生穿越现象。通过此功能相应的测试例,可以找到开启子弹特性的相应的办法,但遗憾的是仅有bullet物理支持。

  • 角色控制器
    此功能通过用户脚本封装,演示了一个完整的接入ammo.js底层物理功能的示例,通过此脚本组件,您可以轻松的实现第一、三人称的角色控制逻辑,并且可以从中学习如何结合现有框架进行组件化封装。

如何获取

为了使用这些抢先体验功能,您需要通过自定义引擎的方式,将引擎代码切换到相应的记录中。

预先需要

具体步骤

首先需要将引擎克隆下来,如以下步骤,熟悉git工作流的朋友也可以通过拉取这个远端

  1. 点击下载引擎包bundle,完成后解压
  2. 打开git bash或者命令行
  3. 执行命令git clone 3d-v1.1_physics.bundle 3d-v1.1_physics

然后还需要一些初始化和配置的工作。

  1. 在引擎目录打开命令行,执行npm install & npm run build
  2. v1.1的编辑器的偏好设置的native develop选项中,取消使用内置js引擎,将自定义js引擎设置为克隆的仓库路径,如下图

接着重新打开编辑器,并且编译引擎。

  1. 重新打开编辑器 (此时会自动编译引擎,可能需要稍等一会)
  2. 为确保引擎成功编译,可以再执行一次编译引擎,位于在开发者选项中,快捷键是ctrl+F7

最后验证是否成功切换引擎。

  • 在正确完成以上步骤之后,应该可以在添加组件的Physics项目中,看到更多的功能组件。

相关测试案例

点击下载对应的展示和测试工程,考虑到文件大小这里上传的是压缩包。相应工程的远端地址

最后,希望这些可以帮助到大家,并且真诚的恳求大家的建议,帮助我们一起构造更好的引擎

4赞

角色控制器是基于物理引擎还是啥。

需要 ammo.js 后端,基于 bullet 提供的 btKinematicCharacterController,分别提供了 2.82 和最新版本

cannon.js 本身没有提供,不过有一些作者基于cannon.js实现了特别完善的CharacterController,有需要可以参考一下这个Sketchbook

预览会报错, 请问是咋回事啊?

执行过npm install & npm run build吗,如果是从远端拉取的,最好把 bin/.cache/dev 这个文件夹删除,这个是之前的缓存,然后在编辑器内再执行一次编译引擎,完成后重新打开编辑器应该就好了

多谢吴彦祖!删了cache文件夹就好了

这个拓展啥时候转正?

这次的内容比较多,部分功能没有经过非常严格的测试和使用,恳请朋友们多多给些反馈,无法是需求诉求还是修改意见,或是BUG反馈,都极其欢迎,这样我们可以更好的判断是否应该合入主版本,以正式提供给更多的用户

希望做一个非基于物理引擎的角色控制器。

用了扩展物理版本 可是 角色加了重力之后还是 忽上忽下 并且碰撞位置不对 还有几率穿模