Cocos Creator 3D v1.0.3 正式发布,新增原生平台支持
2020.01.20 by Cocos
Cocos Creator 版本更新

这个版本可以说是 Cocos Creator 3D 自诞生以来最重要的一个版本,或者说是真正的完全体!因为从 v1.0.3 开始 Cocos Creator 3D 正式支持原生平台。

除了继续扩大平台支持以外,在易用性和上手门槛上我们也做了大量的优化工作,以及无数细节上的功能增强,相信这个版本可以满足绝大部分轻度休闲品类游戏的制作。

在 2020 年春节后,引擎组将继续投入到 v1.1 的开发当中去,届时我们会有更多重要的功能特性更新以及性能优化,将会不断提升 Cocos Creator 3D 产品的优势以及对品类的支撑能力。

重点功能介绍

1. 原生平台支持

从 v1.0.3 开始,大家可以正式打包 iOS、Android、Windows、Mac OS X 原生包,继续基于 Creator 一直以来的原生积累,提供给大家最统一的跨平台开发体验。原生发布的详细使用说明请参考发布文档

2. 小游戏平台支持

我们继续新增了 Cocos Play、小米快游戏、支付宝小游戏三个小游戏平台的支持,请大家参考各个平台的发布文档

3. Async Await !

对!我们响应大家的呼唤,提前了 Async Await 的支持,只需要在构建时,勾选 “异步函数”/"Async Functions" 就可以自由在项目中使用了。除此之外,脚本系统还增加了一些新的特性支持,比如
- 可选链(Optional Chaining)支持
- 空值合并(Nullish Coalescing)支持
- 移除 INode 和 IBaseNode
- 某些循环引用行为将在运行检测并作出警告
- 增加 core-js polyfills 来帮助部分平台补全 ES6 支持

4. 动画编辑器优化

v1.0.3 动画编辑器增加了分量动画功能,支持针对 Vec2、Vec3、Vec4、Color 等类型的分量拆分轨道制作动画帧。同时还增加了同类型的属性轨道的复制、粘贴功能(目前仅支持单轨道);在选中多个关键帧后高亮中间线条,并支持拖拽中间线条来移动关键帧。

5. 增加 Ammo.js 物理模块

为了尝试提供更多的可能性,我们增加了 Ammo.js 物理后端,会在将来支持 wasm 构建出的 Ammo 物理引擎(原生实现是 bullet),将会给物理游戏赋予更高的性能和更多可能性。物理方面,我们还初步增加了胶囊体支持(暂时仅支持 builtin)。

6. 重构 Tween 模块

之前 Tween 模块的使用方式不是非常友好,在内部的审核和讨论后,我们决定将这个模块的 API 和使用方式和 Cocos Creator 2.x 统一起来,在 v1.0.3 中已完成重构,请参考文档了解具体的使用方法。

7. UI 功能强化

UI 做了大量的功能强化工作,比如:
- Editbox 重构和跨平台支持优化
- 透明度级联组件 UIOpacity
- Mask 反向遮罩功能
- 多点触摸开关功能

8. 带搜索功能的添加组件窗口

在节点 Inspector 中,用户选择添加组件时,将看到组织更清晰的组件选择面板,还可以通过搜索来快速寻找想要添加的组件。

部分注意事项和 Breaking Changes

  1. Ammo.js 物理后端已知问题
    • 刚体球和盒碰撞时存在抖动(会影响到表现和事件)
    • 物理材质的回弹系数比较大时,会导致事件不准确
    • 使用物理 ammo.js 时,刚体组件的 Factor 属性在底层的中的表现作用在力和冲量上,与 cannon.js 不同( cannon.js 作用在速度上面,未来可能会调整成一样的)
  2. 材质和合批
    • 蒙皮模型和动态合批的开关全部挪到了材质里,虽然导入 glTF 生成的材质和目前项目已有的材质做了迁移,但任何接下来用户直接新建的材质,都需要在材质里手动指定是否要开启蒙皮或合批
    • 由于资源化渲染管线对启动顺序的影响,所有用户脚本内,在 require 时期创建的 material 将全部失效,最后显示效果为纯黄色(effect 丢失),需要挪到 onLoad 等时期再创建
  3. 平台特性支持
    • 除了微信小游戏平台外,暂时还不支持小米和支付宝小游戏平台上的分包功能,此功能会在以后版本完善。
    • 在打包微信小游戏过程中,如果你勾选了引擎插件功能,会发现有报错,请按照这个说明贴中的方法进行修复,这些修复也将合并在下一个版本中。
  4. TexturePacker 支持:3D 引擎中不再支持 3.x 版本以下的图集格式,导入是会报错的,推荐使用的版本是 4.x。

编辑器详细更新说明

  • [FEATURE]支持原生平台构建(Mac、Windows、Android、iOS)
  • [FEATURE]支持 Cocos Play、小米快游戏、支付宝小游戏三个小游戏平台支持
  • [FEATURE]动画编辑器重构,新增 Vec2、Vec3、Color 的分量动画曲线支持
  • [FEATURE]动画编辑器增加同类型的属性轨道复制/粘贴功能
  • [FEATURE]选中关键帧后高亮中间线条,并允许拖拽中间线条移动关键帧
  • [FEATURE]支持在构建时勾选异步函数来开启 Async Await 等函数支持
  • [FEATURE]新增带搜索功能的添加组件窗口
  • [FEATURE]完善实验室版本地形系统,优化编辑体验,地形数据资源化
  • [FEATURE]添加 UI 空间的对齐按钮(场景面板顶部 Toolbar)
  • [FEATURE]Inspector 面板允许复制组件和只粘贴值
  • [FEATURE]为模型导入切割出的子动画提供 FPS 设置功能
  • [FEATURE]新增 RenderTexture 资源类型(.rt)
  • [FEATURE]立方体贴图导入器添加贴图参数设置
  • [FEATURE]Material 面板上新增定位 Effect 文件的功能
  • [FEATURE]层级管理器面板和资源管理器面板的右键菜单中新增拷贝 uuid 和 path 功能
  • [FEATURE]增强地形编辑功能
  • [FEATURE]新增资源面板右键菜单及功能:在文件夹内搜索
  • [FEATURE]新增其他小游戏平台的自定义构建模板支持
  • [FEATURE]增加了 core-js polyfills,在各个平台完善 ES6 支持
  • [FEATURE]新增实验室功能:资源化的 Programmable Rendering Pipeline
  • [IMPROVE]重构构建流程,完全插件化,让平台扩充更轻松
  • [IMPROVE]重构 Undo/Redo 系统
  • [IMPROVE]独立实现编辑器依赖的数学库
  • [IMPROVE]修改 RenderableComponent的材质动画属性为 materials
  • [IMPROVE]在属性检查器中编辑图片资源时,对应的 sub asset 也一同显示可以编辑
  • [IMPROVE]将 gizmo 的材质引用变为运行时的材质实例
  • [IMPROVE]完善场景内材质资源的迁移流程,支持 sub asset 级迁移
  • [IMPROVE]统一新建资源和节点的名称格式
  • [IMPROVE]优化 FBX 导入时的贴图查找算法
  • [IMPROVE]模型资源 FBX & glTF 的 inspector 面板支持多语言
  • [IMPROVE]FBX 和 Javascript 资源导入器的多语言提示
  • [IMPROVE]对包含蒙皮模型的 glTF 模型导出的材质中自带骨骼动画支持
  • [IMPROVE]优化了某些导入器的报错消息,附加上了被导入资源的 UUID
  • [IMPROVE]防止资源面板数据迁移时报错的情况下导致的死循环问题
  • [IMPROVE]场景面板 Toolbar 插件化
  • [IMPROVE]节点编辑状态下优化材质编辑的方式,改为在同一个界面同时显示组件和材质信息
  • [IMPROVE]加快创建 prefab 节点时层级面板上的显示速度
  • [IMPROVE]减少生成多节点时的查询次数
  • [IMPROVE]防止一些情况下在场景初始化之前发送 ipc 请求
  • [IMPROVE]新增私有节点时层级面板增加容错机制
  • [IMPROVE]将摄像机预览面板从开发者菜单移到面板菜单下
  • [IMPROVE]在构建时自动检测引擎修改以及重新构建引擎
  • [IMPROVE]增加打开版本不匹配或项目类型不匹配时的警告
  • [IMPROVE]增加偏好设置面板的 saving 提示
  • [IMPROVE]优化退出动画编辑模式时面板闪烁的问题
  • [IMPROVE]在脚本资源 library 缺失时不报错
  • [IMPROVE]优化各个面板使用的 ui 和图标
  • [FIX]修复粒子 Gizmo 位置和渲染可能不正确的问题
  • [FIX]修复 prefab 里的动画编辑退出后 info bar 消失的问题
  • [FIX]修复了材质属性面板贴图可能不显示的问题
  • [FIX]修复了节点折叠状态在切换编辑模式后还原不正确的问题
  • [FIX]修复了某些特殊的 binary 格式 glTF 模型无法解析的问题
  • [FIX]修复了某些情况下,构建脚本时脚本会被重复包含的问题
  • [FIX]修复了循环引用提示功能里面,对 type-only-used 标识符的错误处理
  • [FIX]修复动画挂点无法正确获取的问题
  • [FIX]修复 FBX 属性检查器页面 dump material 无法使用的问题
  • [FIX]修复资源移动因 .meta 文件存在而被阻止的问题
  • [FIX]修复 Mac 平台构建的时候资源可能被删除的问题
  • [FIX]修复粒子 multiply effect 计算错误
  • [FIX]修复 prefab 节点在丢失资源的情况下 undo 报错
  • [FIX]修复删除部分组件后 undo 报错
  • [FIX]修复动画编辑中无法复制资源关键帧的问题
  • [FIX]修复动画编辑器中对 sprite frame 属性进行 undo 的问题
  • [FIX]修复取消选中节点后动画编辑器的状态显示
  • [FIX]修复动画编辑器中材质的贴图属性无法打关键帧的问题
  • [FIX]修复退出动画编辑,prefab 会重新生成节点的问题
  • [FIX]修复场景相机离模型很近时,无法使用移动 Gizmo 的问题
  • [FIX]修复粒子组件曲线角度值的显示

引擎详细更新列表

  • [FEATURE]完善物理多后端支持,新增 Ammo.js 后端
  • [FEATURE]将 Tween API 与 Cocos Creator 2.x 同步
  • [FEATURE]SpriteComponent 组件新增 tiled 模式
  • [FEATURE]给 PhysicsSystem 添加 useFixedTime 属性以避免事件不准确和抖动的问题
  • [FEATURE]Builtin 物理中新增胶囊体(暂不支持其他物理引擎)
  • [FEATURE]新增 UIOpacity 组件用于实现 UI 节点的透明度级联
  • [FEATURE]在 Camera 组件中提供 3D 世界坐标系转换到 UI 节点坐标系的方法 convertToUINode
  • [FEATURE]Mask 支持使用 Graphics 作为蒙版(使用方法可参考 test-cases-3d)
  • [FEATURE]Mask 组件支持反向遮罩
  • [FEATURE]新增多点触控开关:macro.ENABLE_MULTI_TOUCH
  • [FEATURE]动画系统支持分量和 Uniform 属性作为动画数据
  • [FEATURE]实验室版本可编程渲染管线初步实现
  • [IMPROVE]优化引擎构建流程,缩减引擎构建包体
  • [IMPROVE]重构 Model 的内存管理模式
  • [IMPROVE]支持计算骨骼动画的包围盒
  • [IMPROVE]重构 AnimationClip,使用动画数据仓库来增强复用和优化动画数据组织
  • [IMPROVE]新增内部材质实例,便于共享和实例化
  • [IMPROVE]节点 TRS 事件改为复用 Node.TransformBit 中的位标记
  • [IMPROVE]将 UIComponent 的 priority 属性移动到 UITransform 组件上,新建 2D 节点默认添加 UITransform 组件
  • [IMPROVE]在 Layout 的排列方向改变时重新调整一次子节点的位置以对齐
  • [IMPROVE]优化 UIStaticBatchComponent 的 API 设计以及添加 clear 操作
  • [IMPROVE]使用 materials 属性取代 sharedMaterials 用于动画编辑
  • [IMPROVE]移除 INode 和 IBaseNode 接口
  • [IMPROVE]重构节点中 UI 相关属性的组织方式,统一迁移到一个 NodeUIProperties 类型属性 _uiProps 下
  • [IMPROVE]更新 Cannon 到 1.0.5 版本,修复 trigger 事件不准确问题
  • [IMPROVE]复用 canvas 来管理 Label 贴图
  • [IMPROVE]同步 Creator 中的 Editbox 组件实现和跨平台实现
  • [IMPROVE]重构引擎启动流程以适应可编程渲染管辖的加载需求
  • [IMPROVE]优化 Profiler 信息的文字尺寸计算
  • [IMPROVE]UICoordinateTracker 增加对 Camera 更新的监听和重新计算
  • [IMPROVE]在 shader 完成 link 之后立即卸除并释放
  • [IMPROVE]优化骨骼动画的材质编译和包围盒计算
  • [FIX]修复 UI 静态合批组件可能导致的 buffer 越界问题
  • [FIX]在部分不支持 gl.UNSIGNED_INT 的平台将顶点 index 的格式适配到 short
  • [FIX]修复贴图为空时的插屏逻辑
  • [FIX]在部分不支持的平台关闭 WebGL 2.0 和 VAO 的使用
  • [FIX]修复点光源的剪裁
  • [FIX]修复阴影在部分平台上由于 z-fighting 导致的闪烁问题
  • [FIX]修复 Layout 类型变化时可能导致的错误
  • [FIX]修复深度缓冲在部分小游戏平台上的兼容性问题
  • [FIX]修复多 UI Canvas 共存时的渲染闪动问题
  • [FIX]修复 ScrollView 运动过程中可能产生的贴图拼接缝隙问题
  • [FIX]修复 ScrollView 的 elastic 属性表现
  • [FIX]修复 Label 在 shrink 模式下宽度仍然越界的问题
  • [FIX]修复重置 ImageAsset 时的错误表现
  • [FIX]修复传递 w 为 0 时导致的 Quat 构造结果错误
  • [FIX]修复 ArrayBufferView 在部分设备上的动画数据解析问题
  • [FIX]修复 SpriteFrame 代码中的不统一性
  • [FIX]修复物理 body 在添加或移除 shape 后被自动重新启用的问题
  • [FIX]修复粒子拖尾的一些渲染问题
  • [FIX]修复编辑器窗口下场景视图并非半透明的问题
  • [FIX]修复一个由对象释放引起的混合表现错误(导致 UI 闪屏)
  • [FIX]修复 iOS Safari 下导航栏下拉可能导致的触摸位置错误问题
  • [FIX]避免 Loader 中可能出现的 ownerQueue 为空的问题
  • [FIX]修复对骨骼的 raycast 计算
  • [FIX]修复骨骼模型的释放问题
  • [FIX]修复了当存在全局标识符 cc 声明时(如 import * as cc from 'cc')脚本执行报错的问题
  • [FIX]修复了项目使用的引擎类型声明文件(cc.d.ts)某些错误


以上就是 Cocos Creator 3D v1.0.3 更新内容,感谢所有开发者对 Cocos Creator 3D 的支持。良好的品质离不开细心的打磨,Cocos 会秉持脚踏实地的精神,稳步提升产品品质。

欢迎小伙伴们继续通过论坛、GitHub、Cocos 企业服务等渠道向我们提交使用反馈!

近日我们将会邀请 Cocos Creator 3D 开发者分享原生游戏开发经验,敬请关注!

Cocos 官方微信公众号:CocosEngine