Cocos Creator 3.5 今日发布,体验和稳定道路上坚实的一步

Cocos Creator 3.5 现已正式发布。v3.5 是继 v3.4 后更趋于稳定的大版本,包含诚意满满的功能更新和体验优化,引擎在基础设施上的升级也为 v3.6 这个重要的里程碑版本打下坚实的基础。

重要更新

Marionette 动画系统

在 v3.4 版本中我们带来了支持复杂角色动画的动画系统 Marionette,支持动画状态机和多维混合等功能。在 v3.5 中,我们继续向其中添加了不可获取的关键能力:层级和遮罩。这可以让开发者轻松做出更复杂的动作系统,比如下面展示的上下半身分离。

2D 项目体验优化

对于 2D 用户和 2D 项目开发,我们做了一些编辑器的体验增强,这也是为了帮助有升级需求的 2.x 开发者更好得升级上来,获得与 2.x 类似的体验。从 3.0 发布以来,我们一直在通过各项性能和体验优化积极推动开发者的升级,并且还会持续优化下去。在 v3.5 中,你将可以看到下面的一些体验优化:

  1. 所有 2D 项目创建出的场景都会默认包含 Canvas 和一个正交投影的 2D Camera,不会包含 3D Camera
  2. 默认的 2D 场景会默认使用 2D 场景视图
  3. 一部分属性面板,比如节点,也会支持 2D 视图
  4. 所有 3D 模块被默认剪裁了,并且在添加组件列表和节点创建列表中也不会包含 3D 相关的组件和节点
  5. 如果你的 2D 项目中需要使用 3D 能力,只需要在项目配置中将 3D 模块添加上即可

Frame Pacing Library (Swappy)

Cocos 和 Google 在 Android 移动平台上一直以来都有非常紧密的合作,Android 也是我们最重要的平台之一。我们很高兴宣布在 v3.5 引擎中加入了Frame Pacing Library。它是 Android Game Development Kit (AGDK) 的一部分,主要用于帮助游戏平滑和稳定帧率,对 OpenGL 或 Vulkan 后端都适用。你可以在 Android 构建面板中启用 Swappy 来开启此功能。

基础几何渲染 Geometry Renderer

我们在此版本中引入了一个新的简易几何渲染的 API,这些 API 是为了绕过组件层,直接在屏幕上渲染一些用于调试的标记几何体。目前已支持线条、盒子、球体、多边形等几何体,渲染模式支持线框模式、填充模式,一部分几何体也可以动态开启光照和深度测试。所有几何体的坐标系在世界空间,并且支持 transform。

更详细的几何体信息请参考下面的表格

材质编辑体验优化

在过去几个版本中,我们一直在修正和提升渲染表现,同时,我们也在关注美术侧的 DCC 内容生产工作流。在 v3.5 中会有一部分材质体验的优化交付给大家:

  1. 当一个 FBX/GLTF 资源被导入后,如果需要修改材质,你不再需要 dump material 然后在复制后的材质中修改,你可以直接在导入的材质上修改。
  2. 当你修改材质时,新版本将支持 undo / redo 操作。
  3. 当你在编辑材质时切换 effect,不同 effect 之间匹配的属性值会被缓存并迁移,比如 ‘mainTexture’ 的贴图资源,如果在不同 effect 中都包含就会自动维持。

同时敬请期待我们后续版本中更显著的美术体验优化。

地形的抹平画刷和高度设置

地形编辑器在新版本中提供了新的抹平和高度画刷,可以让开发者们更方便得编辑平面地貌。

平台抽象层 Platform Abstraction Layer

从 v3.5 开始,我们将所有平台层相关的底层适配代码集合到了 PAL 模块中,包括系统信息、窗口适配、音频、输入系统等。系统层的事件派发行为也被统一了。这是一个底层重构,用户层 API 不会收到影响,但这次重构会让 Cocos Creator 未来有能力更轻松得适配新的平台和环境。

性能优化

此版本中比较显著的性能优化包含以下几点:

  1. Spine 和 Dragonbones 在原生平台通过共享内存避免了 C++ 向 JS 拷贝数据,对原生平台性能有一定的提升。
  2. 优化了 RealCurve 和 CurveRange 的内存占用。
  3. 大幅度优化了粒子系统的反序列化性能。
  4. 在 Android 平台使用 okhttp 来实现 WebSocket 模块以降低功耗并提升性能。
  5. 通过减少原生对 JS 的调用次数来提升 Label 和 Graphics 的渲染性能。

新的 API 文档设计

对于之前的 API 文档体验社区用户多有吐槽,也让引擎的新人上手门槛和学习曲线抖升。为了解决这个至关重要的问题,我们重新设计了 API 文档的组织方式和界面设计,大家可以访问我们 新的 API 文档链接 来体验。当然,这只是一个开始,我们也希望大家继续反馈建议帮助我们持续改善文档的体验。

引擎仓库和自定义引擎升级

为了更好服务开源社区,我们将原生引擎仓库合并到了 engine 仓库中,并且迁移到 cocos/cocos-engine,从现在开始,我们将通过公开 issues 和 公开 projects 向开源社区同步我们的后续计划。如果你正在使用自定义引擎,那么这个修改对你的影响会比较大,从 v3.5 开始,自定义引擎只需要克隆 engine 仓库即可。所有以前在 TS 引擎仓库的修改可以直接 rebase 到 v3.5 分支,但是以前在 engine-native 仓库的修改需要手动应用到 engine 仓库的 native 目录下。详细信息可以参考自定义引擎文档

破坏性更新

  • [FIX] Fix dragonbones/spine sockets transform (engine#10260)

从 v3.5 开始,请避免向 sp.Skeleton 或 dragonBones.ArmatureDisplay 的 sockets 挂件 target 设置已在使用的节点,否则这个节点的变换矩阵会被覆盖。正确的方法是创建一个新的空节点并设置为 socket target,详细信息可以参考 Spine 挂件文档

  • 从 v3.5 开始引擎将支持模型级别阴影偏移(Shadow bias),这将使得阴影效果更容易适配不同模型的表面。如果你的项目中包含自定义材质,请参考升级文档来应用这个配置。
  • Effect 资源中关于 Macro Tags 和 Functional Macros 的语法得到了升级,避免了占用 glsl 的标准 define 语法,旧项目中的 Effect 资源在升级过程中会被自动升级。但如果你从外部直接复制旧版本的 Effect 资源或写新的 Effect 资源时,请注意语法方面的变化:
    • Macro Tag 的新语法:`#pragma define-meta`
    • Funtional Macro 的新语法:`#pragma define`

已知问题

  • 在 iOS 15.4 中,Safari 中默认开启了 “WebGL via Metal” 这项实验性功能,这将会导致部分项目出现渲染问题(画面不刷新或部分刷新,错误的图块等)。一般在开启了 `ENABLE_WEBGL_ANTIALIAS` 的情况下,并且使用了离屏 FrameBuffer 并对其采样,会触发此问题。临时解决方案是在项目配置中关闭 `ENABLE_WEBGL_ANTIALIAS`,此问题暂无根本性的修复方案,很可能会在新的 iOS 版本中得到修复。

欢迎前往官网下载体验最新版本引擎。感谢所有开发者的支持!