自从 Cocos Creator 3D 去年发布依赖,我们经历了 v1.0.x 的五个版本迭代,也陪伴大家度过了最难熬的疫情封城阶段,在这看似停滞的 2020 年,引擎组和我们的开发者一样,始终没有停下脚步,一直在追求更好的产品。除了不断提升稳定性的 v1.0.x 以外,从一月开始,我们就启动了 v1.1 的版本迭代,陆续实现了很多开发者期待的新功能,也做了非常多的优化。不论是性能、功能还是易用性,我们都做了非常多工作,我们这段时间努力的成果 Cocos Creator v1.1 目前已经正式更新了。
官网下载链接
如果通过 Dashboard 下载遇到问题,也可以单独下载版本
Win
Mac
更新说明
性能方面优化
GPU Instancing 合批优化
为了释放更多 GPU 端的能力,我们增加了 GPU Instancing 特性来帮助开发者优化合并 Draw call(需要手动在材质中指定开启 UseInstancing
选项才会生效哦!),适用于绘制大量顶点数据完全相同的动态模型,同时也可以通过自定义 shader 加入更多逐 instance 的材质属性。
更进一步,我们甚至支持蒙皮模型的动态 GPU Instancing 合批,同样只要满足顶点数据完全相同,即便是模型在播放不同的骨骼动画、动画进度不同的情况下,也可以正确合并渲染。
当然如果你的骨骼动画比较多,可能需要做一些配置,我们也为开发者提供了很方便的骨骼动画贴图合批配置面板。
最后令人安心的是,不仅支持渲染特性更完善的 Web 和 Native 平台,即便是微信平台也有相应的 WebGL 扩展支持,所以如有相关渲染效果需求,请一定开动脑筋,多加利用!
GPU 粒子特效
在最新的测试版本中,大家只需要在 ParticleSystem 组件的 Renderer module 中设置 useGPU
即可开启 GPU 粒子模拟。GPU 粒子在不支持 JIT 的 iOS 平台性能测试结果如下,有成倍的性能提升,可以放心的使用一些轻量的粒子特效了。未来我们还会继续用更极限的方式优化粒子特效的性能。
另外,我们还新增了粒子数据剪裁功能,只要在粒子组件面板中开启 EnableCulling
即可对未开启的粒子模块进行数据剔除,减小场景和 prefab 的尺寸。
功能方面
动画系统
多个千呼万唤的动画功能在 v1.1 也正式加入了:
-
开发者们通过内容生产工具导出的 Morph Target 顶点形变动画也可以在 Creator 3D 中正常播放啦,需要在 SkinningModelComponent 上勾选 EnableMorph 选项。
-
骨骼动画的实时计算模式:非预烘焙模式,作为后续 blending、masking、secondary physics 和代码手动控制骨骼姿势等需求的统一基础支撑框架。只需要在
SkeletalAnimationComponent
中不勾选UseBakedAnimation
即可使用实时计算模式。
-
动画组件的
crossFade
函数正式支持骨骼动画的融合过渡,由于这个功能基于实时计算模式,所以需要在SkeletalAnimationComponent
中不勾选UseBakedAnimation
。注意,因为这实际上让骨骼动画从 GPU 计算改为了 CPU 计算,所以性能损耗会大很多,需要尽量控制使用动画融合的模型数量。
地形功能增强和烘焙库
在 v1.1 中我们增强了地形编辑功能,也增加了场景 light map 烘焙功能。地形编辑的 UI 界面有了很大的提升,也增加了凹下
,平滑
等功能
需要注意的是,这两个功能仍然在实验室阶段,所以还需要不断得打磨,功能和特性上也没有固化,欢迎大家提出你们的宝贵意见。
新增物理碰撞体支持
为了加强对物理游戏的支持,我们新增了数个非常有用的碰撞体:
- 胶囊体编辑 Gizmo
- 圆柱体碰撞体及编辑 Gizmo
- 静态网格碰撞体(暂不支持编辑)
除此之外,我们还增加了法线信息到物理射线检测结果中,方便判断物体朝向,开发者可以利用这个信息来计算子弹等物体在接触面上的反弹。
const ray = new geometry.ray();
ray.d.set(0, 0, 1);
if (PhysicsSystem.instance.raycastClosest(ray)) {
const result = PhysicsSystem.instance.raycastClosestResult;
result.hitNormal; // 获取法线方向,可以和 ray.d 一起计算出射角度
}
支持发布百度小游戏平台
v1.1 版本继续加强了平台支持,新增百度小游戏平台支持,开发者们可以直接将游戏发布到百度小游戏平台了,使用体验和其他平台没有区别。
易用性方面
Cocos Creator 3D 接入 Cocos Dashboard
从 v1.1 开始 3D 引擎也直接由 Cocos Dashboard 来管理,这是 Creator 2.x 和 3D 引擎融合的起点。产品层面的融合还有很长的路要走,但我们有坚定的信心最终带给大家完善统一的产品体验。
Camera 预览小窗
虽然之前已经提供了一个独立的 Camera 预览窗口,不过大家对场景中随时观察游戏视角的需求非常强烈,我们也快速得实现了这个功能,从 v1.1 开始,当开发者选中场景中的 Camera 时,就会在场景窗口右下角看到这个 Camera 的预览小窗,切换 Camera 会实时改变预览内容。
材质预览
同样是一个预览功能,材质面板上也开启了材质球预览的功能,这样编辑材质的时候就可以直接在不同的预设模型上看到材质的效果预览了。
这个功能有时候过于鬼畜,程序员和技美可千万忍住不要把策划大人的脸贴上去,笑到脱力我们引擎不会负责任的(免责声明)。
插件脚本依赖
这也是最新的测试版中新增的功能,再也不用担心插件脚本的加载顺序混乱了,大家可以给自己的 JS 插件脚本定义依赖关系,加载的时候也会按照依赖进行加载排序。
我们也更新了一个使用 Protobuf 的实例工程到 Example 仓库中
Camera 预览小窗
虽然之前已经提供了一个独立的 Camera 预览窗口,不过大家对场景中随时观察游戏视角的需求非常强烈,我们也快速得实现了这个功能,从 v1.1 开始,当开发者选中场景中的 Camera 时,就会在场景窗口右下角看到这个 Camera 的预览小窗,切换 Camera 会实时改变预览内容。
动画编辑器操作优化
动画编辑器一直都是我们非常重视的模块,从 Cocos Creator 时代开始就不断打磨到现在,在 v1.0.4 中,我们已经增加了诸如:快捷的批量关键帧间隔调整,跨节点轨道复制粘贴,间接属性(如材质属性)关键帧编辑,动画编辑器内直接对资源进行选取等非常好用的功能。现在在 v1.1 中,我们进一步支持了多选关键帧后的缩放、移动和删除功能,还支持动画编辑器布局的调整。可以看下面的视频更直观得感受我们动画编辑器内的编辑体验。
需要注意的行为修改
-
macro.ENABLE_WEBGL_ANTIALIAS
配置在之前到版本中并没有生效,而 v1.1 我们修复了这个问题。由于该配置默认值为 false,开发者们可能会感受到抗锯齿被关闭的模糊感,可以通过在 main.js 的cc.game.init
之前增加cc.macro.ENABLE_WEBGL_ANTIALIAS = true;
来开启抗锯齿。默认值保持 false 的原因是关闭抗锯齿可以在不少中低端设备上提升性能。 - 原生平台构建目录存在 frameworks 时将不修改配置数据只更新项目资源,原生平台的查看构建配置选项屏蔽平台相关修改。如果需要编辑器来重新配置项目数据,请删除原目录下的 frameworks 文件夹或者新建构建任务。关于原生构建任务我们后续还会收集用户反馈做进一步的优化。
- 重构
SpriteFrame
结构,SpriteFrame
不再直接引用原始图像资源,而改为引用一个Texture2D
。 - 胶囊碰撞体属性重构,
height
变为cylinderHeight
文档和教程
随着 v1.1 大量新功能的更新和体验的优化,我们也准备了充分的文档给大家参考。还有一个好消息是,我们在 B 站连载的快上车系列视频教程也完结了,如果你是刚接触 Cocos Creator 3D 的开发者,那么这份视频教程可以说是最合适的上手资料。
除此之外,在我们公众号上,最近会陆续更新一些 3D 的技术分享,大家可以保持关注,给我们公众号加个星吧!如此良心的技术社区怎能错过?
完整新增内容和优化
Editor
- [FEATURE] 支持对插件脚本进行排序,可定义依赖关系
- [FEATURE] 新增构建时模块信息擦除功能,大幅优化脚本导入速度
- [FEATURE] 增加组件文档跳转功能
- [FEATURE] 动画编辑器支持缩放关键帧,优化多选关键帧后的缩放、移动、删除
- [FEATURE] 支持地形烘焙 light map 功能
- [FEATURE] 新增场景编辑器内的摄像机预览小窗
- [FEATURE] 新增材质属性检查器中的材质预览
- [FEATURE] 支持在模型属性面板设置修改骨骼动画的 Wrap Mode(感谢 @tangxuanli2014 反馈)
- [FEATURE] 动画编辑器上下部分支持拖拽更改布局方便编辑
- [FEATURE] 支持发布到百度平台
- [FEATURE] 原生平台的构建模板支持
- [FEATURE] 脚本构建选项界面增加“擦除模块结构”选项
- [FEATURE] 构建面板的场景支持搜索
- [FEATURE] Console 内部分资源报错支持点击后资源管理器中对应资源直接闪烁提示
- [FEATURE] 编辑器根据状态动态调整帧率,降低 CPU 占用
- [FEATURE] 多选节点的时候支持添加删除组件
- [FEATURE] 支持同时拖拽多个资源到 Inspector 中的数组元素上
- [FEATURE] Inspector 数字输入框支持鼠标点击属性名拖拽来快速修改数值
- [FEATURE] 模型导入增加了“使用顶点色”选项
- [FEATURE] 在偏好设置 —> 插件 —> builder 选项内可实时修改构建进程的 log 等级
- [FEATURE] 新增 Camera 和 Gizmo 配置(相机的颜色和网格颜色)
- [FEATURE] 项目设置中 Layers 设置支持清空名称即为删除
- [FEATURE] 新增胶囊和圆柱碰撞体编辑 Gizmo
- [IMPROVE] 大幅降低资源管理器性能开销
- [IMPROVE] 新建项目时统一了 git 换行符配置
- [IMPROVE] 地形编辑和画刷功能增强
- [IMPROVE] 支持 UMD 格式的插件脚本
- [IMPROVE] 增加 console 在 ready 时的容错
- [IMPROVE] 优化剪切节点的功能
- [IMPROVE] 节点支持空名称
- [IMPROVE] 优化 Camera 和 Gizmo 弹窗间距和缩短隐藏时间
- [IMPROVE] 优化 Gizmo 性能
- [IMPROVE] 优化编辑器 i18n 数据格式
- [IMPROVE] 优化脚本导入失败时的输出消息,帮助解决循环引用问题
- [IMPROVE] 优化构建面板的场景列表显示
- [IMPROVE] 添加组件选择弹框使用优化
- [IMPROVE] Inspector 内限制编辑内置资源并且增加锁定提示
- [IMPROVE] 优化材质 Inspector 中选框的点击区域
- [IMPROVE] 优化 Color Picker 保存颜色的功能
- [IMPROVE] 更改压缩纹理、自动图集、图片导入的图片库
- [IMPROVE] 优化自动图集面板,允许直接查看合图资源以及修复点击 preview 触发修改
- [IMPROVE] 优化 assets 面板操作体验:支持回车键重命名;支持限定类型搜索
- [IMPROVE] 支持 glTF 格式中的 sparse accessor
- [IMPROVE] 部分面板内搜索后支持使用上下方向键选择搜索结果
- [IMPROVE] 部分面板内搜索后支持使用 enter 键选择
- [IMPROVE] 将预览设备分辨率数据迁移到项目配置内
- [IMPROVE] 同步相机设置颜色的属性改为 clearColor
- [IMPROVE] 动画编辑器中对所有 ctrl 相关的快捷键进行 mac 的兼容处理
- [IMPROVE] 消除当脚本构建的 bundle 过大时候的警告
- [IMPROVE] 移除百度平台不支持的部分横屏方向
- [IMPROVE] 构建场景搜索功能不区分大小写,优化列表展示
- [IMPROVE] 移除 Huawei、OPPO、vivo、小米平台对 icon 图标后缀限制
- [IMPROVE] 添加原生平台校验处理,参数填写不完善界面将直接提示
- [IMPROVE] 优化构建 log 输出,将可以直接在控制台关联到对应报错资源
- [IMPROVE] 增加导入器异步保存时的等待,避免导入流程未完成情况下导致的文件丢失
- [IMPROVE] 优化地形编辑存储
- [IMPROVE] 禁止对地形属性进行动画编辑操作
- [IMPROVE] 兼容低版本 TexturePacker 导出资源
Engine
- [FEATURE] 模型支持自动 GPU Instancing 合批
- [FEATURE] 骨骼动画支持自动 GPU Instancing 合批
- [FEATURE] 支持 Morph target(Blend Shape)
- [FEATURE] 支持动画 CrossFade
- [FEATURE] GPU Based Particle System
- [FEATURE] 相机组件调整:加入 FOV 轴向和曝光相关参数设置以及优化编辑器面板(感谢 @k8w 反馈)
- [FEATURE] 新增静态网格碰撞体和圆柱碰撞体
- [FEATURE] 增加法线信息到物理射线检测结果中
- [FEATURE] 增加 ray_model、ray_mesh 到 geometry.intersect
- [IMPROVE] GFX 抽象优化和代码精简,简化 WebGL 后端实现
- [IMPROVE] 在静态合并模型批次后不需要再手动禁用原始节点或模型(感谢 @玻璃小屋 反馈)
- [IMPROVE] 优化组件生命周期函数的运行保护(合并自 Creator 2.x)
- [IMPROVE] 重构 SpriteFrame 结构,SpriteFrame 不再直接引用原始图像资源,而改为引用一个 Texture2D
- [IMPROVE] 优化游戏和引擎启动流程
- [IMPROVE] 优化动画数据准备逻辑
- [IMPROVE] 优化动画混合逻辑
- [IMPROVE] 优化骨骼动画曲线支持
- [IMPROVE] 优化骨骼动画中的曲线缓存
- [IMPROVE] 优化从初始姿态开始播放动画时的奇怪过渡问题
- [IMPROVE] 优化 AnimationClip 的哈希计算
- [IMPROVE] 完善 Camera 属性排序和文档
- [IMPROVE] 物理引擎状态同步时机和调用次数优化
- [IMPROVE] 胶囊体碰撞器属性重构,height 变为 cylinderHeight
- [IMPROVE] 对插屏开启 Retina 适配,效果更好
- [IMPROVE] 移除部分无用警告信息
- [IMPROVE] 同步 Creator 2.x 中 Widget 的 Align Mode 选项
FIXES
Editor FIXES
- [FIX] 修复多开编辑器的情况下,重复导入 internal 资源的问题(感谢 @linchunbo @Mr_www 的反馈)
- [FIX] 修复面板可能注册两次以及面板重复启动的问题
- [FIX] 修复面板可能白屏的问题
- [FIX] 修复非选中节点状态改变时降帧判断的问题
- [FIX] 修复复制粘贴节点 scale 数据被重置的问题
- [FIX] 修复场景悬浮窗口闪烁
- [FIX] 修复偏好中心里的步长设置
- [FIX] 修复删除节点报错
- [FIX] 修复预览自定义设备被删除时报错无法预览
- [FIX] 修复模型动画页面拖动切割可能超出边界的问题
- [FIX] 修复 console 滚动的问题
- [FIX] 修复原生平台构建模板支持
- [FIX] 修复骨骼动画 wrapMode 不同步的问题
- [FIX] 修复添加粒子组件时,node gizmo 没有及时更新的问题
- [FIX] 修复节点删除,node gizmo 没有及时更新的问题
- [FIX] 修复动画编辑器中键盘快捷键的各种体验问题
- [FIX] 修复清空选择节点后刷新仍不能返回树形顶部的问题
- [FIX] 修复地形节点下添加节点报 gizmo 错误
- [FIX] 修复复制多个地形时 tilesize 的报错
- [FIX] 修复复制节点时模型不显示材质的问题
- [FIX] 修复构建面板点击设置 Android SDK 时出现警告的问题
- [FIX] 修复单个 json 分组打包时的异常
- [FIX] 修复场景悬浮窗口在添加组件的时候不更新的问题
- [FIX] 修复粒子属性编辑器和播放控制面板不同步的问题
- [FIX] 修复 Camera 被隐藏时预览小窗的报错
- [FIX] 修复动画编辑器在高度不够的情况下布局错位的问题
- [FIX] 修复 plist 导入器重新导入数据不更新的问题(感谢 @gtd138 反馈)
- [FIX] 修复特定情况下的资源导入报错的问题
- [FIX] 修复烘焙库开发环境和生产环境路径不一致的问题
- [FIX] 延迟编辑器中的 GL context 创建
- [FIX] 修复动画编辑器中的粘贴关键帧菜单项功能
- [FIX] 修复动画编辑器中快捷键粘贴属性轨道的问题
- [FIX] 修复图集中旋转的 SpriteFrame 在九宫格编辑界面下的显示错误
- [FIX] 修复场景悬浮窗口在新增删除组件的时候不会同步更新的问题
- [FIX] 修复在 MD5 缓存模式下没有排序插件脚本的问题
- [FIX] 修复构建过程可能丢失部分 json 的问题
- [FIX] 修复 joint texture layout 面板的 NaN 错误
- [FIX] 修复动画编辑器和属性检查器中 WrapMode 的数据同步和显示问题
- [FIX] 修复动画编辑器中节点同级下有同名节点的警告
- [FIX] 增加在层级面板粘贴节点时对 parent of null 问题的容错
- [FIX] 修复空节点中添加 CameraComponent 的 Gizmo 报错
- [FIX] 修复 light map 编辑保存时地形 prefab 的报错
- [FIX] 修复预览小窗偶发的花屏问题
- [FIX] 修复 uuid 压缩后 SpriteFrame 序列化问题
- [FIX] 修复粒子拖尾模块 enable 没有立即刷新的问题
- [FIX] 修复项目中没有脚本情况下的打包问题
- [FIX] 修复 bmfont 格式导入问题
- [FIX] 修复模型 mesh 分离的情况下材质的导入问题
- [FIX] 修复合图资源压缩后加载异常
- [FIX] 修复小米平台小包模式的问题
- [FIX] 修复地形 BlockCount 可能导致的编辑器异常
- [FIX] 修复 AssetDB 导入可能超时的问题
- [FIX] 修复 AssetDB 升级可能遗漏 migration 的问题
- [FIX] 修复场景数据迁移阻塞进程的问题
- [FIX] 修复 inspector 修改 rts 可能无效的问题
- [FIX] 修复 Color picker 的 Gradient 模式报错
- [FIX] 修复动画模式下动画组件的数组不能删除的问题
- [FIX] 修复初始新开编辑器加载 uuidUtils 为 null 的问题
- [FIX] 修复恢复布局失败的问题
- [FIX] 修复场景和 prefab 迁移的时候,出现资源找不到,无法迁移的情况
- [FIX] 修复烘焙面板的一些使用和数据问题
- [FIX] 修复 Local/Global 控制按钮无效的问题
- [FIX] 修复动画编辑器的体验问题
- [FIX] 修复 glTF 动画的 hash 计算避免出现冲突
- [FIX] 修复 console 无法自动跳转到底部的问题
- [FIX] 修复编辑 prefab 时 hierarchy 显示错误的问题
- [FIX] 修复 SpriteFrame 动画最后一帧不播放的问题
- [FIX] 修复子包构建问题
- [FIX] 修复构建部分平台自定义模板支持
- [FIX] 修复相机和地形节点的跨场景复制问题
- [FIX] 修复部分动画数据迁移的问题
- [FIX] 修复小窗预览切换平行投影时没做相应改变的问题
- [FIX] 修复百度分包入口文件名错误导致无法运行的问题
- [FIX] 修复无法唤起新版本微信开发者工具的问题
- [FIX] 修复挂点的动画曲线路径映射问题
- [FIX] 修复设置外部 native 引擎不生效
- [FIX] 修复构建的 texture json 分组丢失
- [FIX] 用调试密钥库构建,密钥库别名密码会被清空,导致 Android(release)编译失败
- [FIX] 修复原生平台 APP ABI 选项无法取消选中
- [FIX] 修复构建面板导入配置数据无效(界面数据未更新)
- [FIX] 修复自动图集可能出现的像素偏差
- [FIX] 修复模型动画页面拖动切割超出边界后将会产生无效数据
- [FIX] 修复编辑器搜索窗口内不显示 glTF 内的 texture 的问题
- [FIX] 修复 Inspector 前进后退能够选中已经删除的节点的问题
- [FIX] 修复 ButtonComponent 组件检查器内的 clickEvents 属性不会动态刷新的问题
- [FIX] 修复 color 属性在 readonly 状态下还能够弹出修改的问题
- [FIX] 修复 SpriteFrame 检查器内部分无法修改的属性没有禁用标记的问题
- [FIX] 修复手动更新 prefab 的时候会报错的问题
Engine FIXES
- [FIX] 修复 Graphics 类型的 Mask 触摸判断的错误(感谢 @k8w 贡献的修复 PR)
- [FIX] 修复多点触摸无法识别多个触点的问题(感谢 @liaohai 的反馈)
- [FIX] 修复陀螺仪适配(感谢 @wjc767176123 @qcxns 的反馈)
- [FIX] 修复部分类型骨骼动画混合(crossFade)时可能消失的问题(感谢盛科互联提供 demo 和资源)
- [FIX] 修复 RichText 可能导致的无限循环问题(感谢 @linchunboyouxiang 反馈)
- [FIX] 修复节点事件绑定有可能失效的问题(感谢 @linchunboyouxiang 反馈)
- [FIX] 修复动画 cross fade 在切换过程中一些可能无效的情况
- [FIX] 修复 vivo 平台陀螺仪事件监听导致的报错
- [FIX] 修复 iOS 13+ 下陀螺仪事件无效的问题
- [FIX] 修复 Cocos Play 平台下陀螺仪事件数据错乱的问题
- [FIX] 修复 RigidBody 组件中的 body API 命名问题
- [FIX] 修复物理系统 ID 丢失问题(感谢盛趣的反馈)
- [FIX] 修复 Instancing API 在 UC 上无效的问题(已禁用)
- [FIX] 修复支付宝平台上插屏的适配
- [FIX] 修复 PageView 滚动时的位置错误
- [FIX] 修复压缩纹理的格式判断和加载问题
- [FIX] 修复骨骼模型在没有立即 enable 情况下的类型错误
- [FIX] 修复 GPU 粒子系统中 size 模块的效果不一致问题
- [FIX] 修复部分平台或字体 Label 可能会被截断的问题
- [FIX] 修复 deprecated 的 replace API 中的错误
- [FIX] 修复关闭多点触摸功能在 SystemEvent 上无效的问题
- [FIX] 修复部分情况下程序添加 AnimationComponent 时 playOnLoad 设置不生效的问题
- [FIX] 修复 vivo 平台 editbox 事件回调的问题
- [FIX] 修复优化 Skybox 渲染问题
- [FIX] 修复部分平台插屏适配问题
- [FIX] 修复 Ammo 物理后端在微信平台的兼容问题
- [FIX] 修复 Ammo 后端的内存泄露
- [FIX] 修复 Cannon 物理后端中 body 碰撞盒的更新问题
- [FIX] 修复动画模块的内存泄露
- [FIX] 修复 AnimationState 在特定执行序列下的更新问题
- [FIX] 修复 Android 版本识别问题
- [FIX] 修复多 Pass 情况下 UBO 漏更新的问题
- [FIX] 修复 Model 销毁可能导致的 GL 错误
- [FIX] 修复 Joint Texture 的 release 逻辑
- [FIX] 修复刚体移动时的射线检测(cannon.js)
- [FIX] 修复 macro.ENABLE_WEBGL_ANTIALIAS 无效的问题
- [FIX] 修复 mainLoop 在原生平台被重复启动的问题
- [FIX] 修复 AnimationClip 的 hash 计算问题