Cocos Creator v2.4 更新说明,解锁更多新功能!

2020.7.1 官方新闻 by Cocos

工欲善其事,必先利其器!在长达两个月的测试后,2.4 版本终于在端午前来了!

在此感谢给予我们宝贵意见和建议的各位小伙伴们,也提前祝大家端午节安康喔!

这个版本中包含了许多新的功能与更新,如资源管理系统重构、Asset Bundle、优化原生上 Label 渲染的性能、优化 Graphic 渲染效果等等。

相信全新的 2.4 版本将会让大家的工作更加高效、游戏内容更加丰富、体验进一步提升,建议所有开发者升级!

以下是 2.4 完整更新说明。

What’s new 

支持 Asset Bundle 功能

Asset Bundle 可将工程中的资源按照开发者的意愿进行模块划分,将不同场景不同需求的资源划分在多个包中,从而减少首次下载和加载游戏时的所需时间,也可以跨项目复用,用于加载子项目中的 Asset Bundle。

Asset Bundle 还提供了优先级、压缩类型等相关设置,用于对 Asset Bundle 的包体和加载进行优化。

详情请参考[Asset Bundle][加载 Asset Bundle]

新增 cc.AssetManager 模块用于资源管理

Asset Manager 是 Creator 在 v2.4 新推出的资源管理器,其具备加载资源、查找资源、销毁资源、缓存资源、Asset Bundle 等功能。

Asset Manager 拥有更好的性能、更易用的 API、以及更强的扩展性。

其主要提供了以下几点新特性:

  • 支持所有资源的加载与预加载,预加载能以更轻量的方式静默运行,不影响运行效率
  • 支持 Asset Bundle
  • 支持更安全的自动释放机制,释放资源时无需考虑其引用情况,避免错误释放资源
  • 支持下载失败重试、下载优先级、下载并发数等设置,可根据各种情况进行调整
  • 支持更方便地定制加载流程,实现特殊效果

详情请参考[Asset Manager][动态加载]

增加 Label 的混合选项

支持设置 Lable 的混合选项,可在不同的场景下,使用不同的设置以最大化文本渲染性能。详情请参考[系统文本的混合模式说明]

原生平台上使用 FreeType 渲染 Label

  • 提升 Label 初始化速度,Android 提升 5 倍左右,iOS 提升 3 倍
  • 在使用 TTF 字体和 Char 模式时支持 Bold、Outline、Shadow 等效果

支持 Graphic 的抗锯齿效果

使用 SDF 技术优化 Graphic 的锯齿问题

支持其他小游戏平台的压缩纹理

编辑器进一步支持更多小游戏平台的压缩纹理限制,只需在 Mini Game 项添加压缩纹理格式,即可设置包括微信小游戏、OPPO 小游戏、vivo 小游戏等多个平台的压缩纹理格式。

完善原生热更新支持 [#2312]

2.4 进一步完善原生热更新能力,优化了以下内容:

  • 添加获取更新包大小接口
  • 对链接添加 MD5 参数,对 CDN 更加友好
  • 解决更新过程中断导致的资源丢失和错乱的问题

详细请参考[热更新范例教程]

新增 SafeArea UI 组件

该组件会将所在节点的布局适配到异形屏手机的安全区域内,可适配 Android 和 iOS 设备,详细可查看 [SafeArea 组件参考]

其它新增特性

  • 增加压缩纹理缓存功能,构建之后将压缩纹理进行缓存,重复构建时将尽量复用缓存内容,加快构建速度
  • 在 Web 平台使用 ImageBitmap 加载图片,提升预览和 Web 平台图片解析速度,减少加载时的卡顿
  • 编辑器属性面板支持拖拽数组赋值
  • 升级 TypeScript 的版本到 3.9.2
  • 升级原生平台的 V8 版本到 8.0.426.16
  • 支持导入 GLTF 资源
  • 在所有小游戏平台支持首场景分包功能
  • 支持预览时进行模块剔除,提升预览速度,还能更早暴露错误的模块剔除设置

Improvements  

  • 优化 2D 粒子系统 free 和 relative 模式的性能 [#6236]
  • 优化 ToggleContainer 获取 toggleItems 的效率 [#6569]
  • 提升原生平台 WebSocket 带宽 [#2353]
  • SpriteFrame 资源增加 None Trim 类型,可快速设置为无裁剪
  • 完善 jsb 的代码提示
  • 支持设置预览端口
  • 原生桌面平台构建时可设置窗口大小

Engine  

  • [CORE]修复 cc.easeBackOut 在 time 为 0 时返回值不正确的问题,[#6728],感谢 chen-gaoyuan
  • [CORE]修复 Node.walk 遍历错误的问题 [#6710]
  • [CORE]修复调用 cc.dynamicAtlasManager.showDebug 报错的问题 [#6697]
  • [CORE]修复 onLoad 中设置节点的 size 无效的问题 [#6688]
  • [CORE]修复按钮禁用状态下的材质将背景材质重置回默认材质的问题 [#6562]
  • [CORE]修复 BMFont 配置数据不存在时的报错 [#6472]
  • [CORE]修复开启预乘后,透明度无效的问题 [#6451]
  • [CORE]修复 Camera.render() 渲染两次的问题,[#6355],感谢 大城小胖
  • [CORE]修复调用 Texture2D.setPremultiplyAlpha 之后图片翻转的问题 [#6602]
  • [PARTICLE]修复 2D 粒子系统 relative 模式,节点旋转时,粒子跟随的问题 [#6236]
  • [3D]修复 3D Label 在 char 模式下不显示的问题[#6882]
  • [3D]修复勾选 Enable Auto Batch 选项并切换 Mesh 资源导致渲染错误的问题 [#6901]
  • [3D]修复渲染单个 Camera 阴影错位的问题 [#6477]
  • [3D]修复 effect 中 cc_matProj 错误的问题 [#6653]
  • [EDITBOX]修复 number 模式下,EditBox.maxLength 属性不生效的问题 [#6725]
  • [EDITBOX]修复 EditBox 在 ScrollView 里滚动时,无法更新位置的问题 [#6634]
  • [TILEDMAP]修复 Tiled Map 渲染顺序可能错误的问题 [#6284]
  • [TILEDMAP]修复 Tiled Map 隐藏的图像还是会渲染的问题 [#6309]
  • [SPINE]修复 Spine 纹理使用压缩纹理后渲染错误的问题 [#6483]
  • [SPINE]修复 Spine 贴图可能渲染错误的问题 [#6584]
  • [SPINE]修复贴图设置为预乘后,DragonBone 与 Spine 渲染错误的问题 [#6696],感谢 大城小胖
  • [DRAGONBONE]修复 DragonBone 在销毁场景时一直报错的问题 [#6553]

Native  

  • 修复屏幕翻转后,节点缩放不正确的问题 [#6689]
  • 修复安卓原生 JniHelper 不是线程安全的问题 [#2457]
  • 修复 unzip 不是线程安全的问题 [#2131],感谢 benloong
  • 修复安卓 EditBox 的完成按钮被虚拟导航栏遮挡的问题 [#2426]
  • 修复 Spine 节点在 iOS 上无法获取节点大小的问题 [#273]
  • 修复原生 Effect 中 cc_time 错误的问题 [#6586]
  • 修复 iOS 音频播放可能崩溃的问题 [#2358]
  • 修复节点旋转计算错误的问题 [#2361]
  • 修复设置 Label.string 时编码错误导致崩溃的问题 [#2395]
  • 修复游戏退出时出现报错 [#2406]
  • 修复屏幕旋转后,输入框会将视图上推的问题 [#2415]
  • 修复 Spine 3.6.53 版本导出的 JSON 文件里的路径动画解析失败的问题 [#2413],感谢 laomoi
  • 修复 Android 上重力感应错误的问题 [#2231]
  • 修复 Tiled Map 当节点挪动到没有地块信息的位置时,不会被渲染的问题 [#2283]
  • 修复原生 WebSocket 接口与 Web 不一致的问题 [#2297]
  • 修复调用 Camera 的 render 方法,会导致 Spine 加速播放的问题 [#258]
  • 修复安卓平台,剔除 AudioSource 模块导致 audioEngine 无法使用的问题
  • 修复 Android 9, Android 10 版本号检测失败的问题 [#6466]

Web  

  • 修复 iOS Web-Mobile 摘下耳机后音频无法播放的问题 [#6730]
  • 修复 WebView 透明度在 iOS 上错误的问题 [#6717]
  • 修复 iOS 浏览器上,输入中文后,无法再输入英文的问题 [#6631]

Mini Game  

  • 修复微信小游戏 WebSocket 发送 Uint8Array 数据报错的问题 [#115]
  • 修复音频意外中断时无法自动恢复播放的问题 [#118]
  • 修复 PC 微信数据开放域无法运行的问题

Editor  

  • 修复 Sprite Editor 保存和还原状态不对的问题
  • 修复在动画编辑状态下,无法重命名不在编辑的动画剪辑的问题
  • 修复增加 Spine 资源后,编辑器无法识别出来的问题
  • 修复用户插件重启后,编辑器可能无法打开的问题
  • 修复多次调用 getNativeAssetPaths 返回值错误的问题
  • 修复脚本重命名后加载脚本失败的问题
  • 修复点击图集会出现 width 和 height 报错的问题
  • 修复使用自动图集图片可能失真的问题
  • 修复导入某些图片导致资源面板错误的问题
  • 修复 Prefab 编辑模式无法通过 delete 键删除节点的问题
  • 修复勾选 Filter Unused Resources 在图集没有被导出时无效的问题
  • 修复 effect 中定义宏的取值范围无效的问题 [#6616]
  • 修复动画编辑器设置 CircleCollider.offset 属性异常的问题 [#6600]
  • 修复还原上次保存无效的问题
  • 修复设置预览浏览器无效的问题
  • 修复导入 Cocos Studio 工程没有字体资源的话,会出现报错的问题
  • 修复多开可能造成编辑器错误的问题

Known Issues  

  • 使用远程 Asset Bundle 并勾选延迟加载时,音频可能无法播放,请使用 cc.assetManager.postLoadNative 加载后播放。

升级提示  

Cocos Creator 对项目的升级操作是不可逆的,请在升级前提交或备份旧版项目。

绝大多数项目通常都能自动升级,但因为项目难免存在特殊性,开发者应该根据项目自身需求,提前对新版本引擎进行试用和评估。


此外,出于稳定性考虑,建议即将上线或已上线的项目谨慎升级。

以下是升级说明,如果开发者们在升级中遇到困难,欢迎向我们反馈,我们会尽力协助喔。

从 < 2.4.0 版本升级

  • cc.loader 已经不建议使用,请使用最新的 cc.assetManager 来代替,请参考 [资源管理模块升级指南]
  • 子包功能已升级为 Asset Bundle,请参考 [资源分包升级指南]
  • 调整了项目构建后的目录结构,调整了 BuildResults 的 API,如果你使用了编辑器插件获取编辑器构建结果,请参考 [定制项目构建流程升级指南]
  • 从 1.10 开始废弃的 cc.RawAsset 已被正式移除,请使用 cc.Asset 代替。由于 2.4 不再兼容原有 1.x 项目中对 RawAsset 类型的历史遗留用法,建议所有要升级到 2.4 的项目,特别是从 1.9 版本一路升级上来的项目,先在任意的 1.10 ~ 2.3 版本中对编辑器编译代码时输出的所有警告或报错都正确处理完毕,再升级到 2.4。
  • cc.Color.fromHex 已被废弃,请使用 cc.Color.fromHEX 接口

从 < 2.3.3 版本升级

  • Effect 中的 CCTexture2D,CCTexture2DRGB 方法已被废弃,请改用 CCTexture,CCTextureRGB
  • Vec3.FRONT 已被废弃,请改用 Vec3.FORWARD

从 < 2.3.0 版本升级

从 2.3.0 开始,定制安卓原生工程时,需注意 Android 与 Android Instant 使用了同一个构建模板。

  • 如果是 Android 平台单独使用的代码请放入 app/src 目录,  单独使用的第三方库请放入 app/libs 目录。
  • 如果是 Android Instant 单独使用的代码和第三方库请分别放入 game/src, game/libs 目录。
  • 如果是 Android 和 Android Instant 共用的代码和第三方库,请分别放入 proj.android-studio 根目录底下的  src 目录和 libs 目录。
  • proj.android-studio 根目录底下 jni/CocosAndroid.mk , jni/ CocosApplication.mk,主要用于配置引擎相关的配置,开发者的配置,建议 Android 放到 app/jni/Android.mk 和 app/jni/Application.mk 中,Android Instant 请放入 game/jni/Android.mk 和 game/jni/Application.mk 中。

此外,在 Cocos Creator 编译 Android 时会默认执行 assembleRelease/Debug,编译 Android Instant 时会执行 in stant:assembleRelease/Debug。

如自定义了音频前后台切换时的暂停逻辑,升级到 2.3.0 后请移除。

目前 Creator 游戏在所有平台上前后台互相切换时,都会在内部自动暂停和恢复音频。

如果开发者之前有对这一块进行过定制,监听并执行了 cc.audioEngine.pause()/resume() 之类的音频操作,可能会和引擎默认行为冲突。如果有遇到相关的音频问题,只需移除相应的定制代码即可。

从 2.0 – 2.3.0 版本升级

从 2.3.0 开始,Canvas 组件不再负责将 Canvas 节点尺寸设为屏幕大小,此行为将结合 Widget 组件实现。为保证兼容性,2.0 项目升级后,Canvas 所在节点会自动添加 Widget 组件。(从 1.x 项目升级无此问题)

从 < 2.2.0 版本升级

从 2.2.0 开始,我们强化了内存管理机制,现在要求用户通过代码动态创建且独立于场景节点树的 cc.Node 必须通过 destroy() 释放,否则引擎无法知道何时回收这类节点的内存,会导致内存泄露。

  • 如原先手动从场景中移除的节点,在不需要用到的时候也需要统一 destroy():
  • 如原先通过 cc.removeSelf 这个 action 销毁节点,请改为使用 cc.destroySelf。
  • 如原先通过 cc.NodePool 管理节点,则不受影响。

从 2.2.0 开始,我们不再建议你使用节点的Skew 功能。

Skew 通常用作在 2D 引擎中模拟 3D 效果,随着 Cocos Creator 对 3D 节点的深入支持,Skew 效果已经完全可以由 3D 节点来实现。

所以为了统一使用体验,进一步优化引擎底层实现,我们废弃了 Skew 属性。

不过我们依旧会保留一段时间内的向下兼容,开发者可在旧项目中延续原有做法。后续我们将进一步完善兼容方式和升级案例,择机正式移除 Skew 功能。

从 < 2.0 版本升级

打开 1.x 项目的话,场景等所有资源将会自动升级,代码中的废弃接口从 2.3.3 开始将会在保持兼容的基础上同步输出报错。

升级方式可参考[1.10 资源升级指南][2.0 升级文档]进行调整。

答疑  

3D 项目应该用 Creator 2.x 还是 Creator 3D?

随着 Creator 2.x 对 3D 的支持越来越完善,以及 Creator 3D 自身的发展也越来越成熟,我们也遇到了不少开发者在立 3D 项目时的疑问:既然 Creator 2.x 和 Creator 3D 版都支持 3D,那么我应该选择哪一个引擎?

在这里我们顺便统一解答下:

1. 如果需要集成 TiledMap、Box2D 或者 Spine,或者想要更稳定和高性能的 UI/2D 表现,或者想要发布到原生平台,暂时只能用 Creator 2.x。

2. 如果 3D 场景特别多或者特别大,或者有骨骼动画融合、换装、过渡等表现需求,或者需要更高级别的渲染能力,只能用 Creator 3D。

3. 简而言之,如果是 2.5D 项目,通常采用 Creator 2.x;如果是纯 3D 的轻度项目,一般两个引擎都能胜任;如果是 3D 重度项目,通常采用 Creator 3D。

当然,以上判断标准并不是绝对的,我们也遇到能力强的开发者在 2.x 上实现了大地形及次世代效果,甚至从 3D 往 2D 移植了 GPU 粒子、GPU Instancing、GPU 骨骼动画等功能。

开发者可以在立项前期对两个引擎进行充分的技术预研、压力测试,结合团队自身实际情况进行选择。

以上就是本次更新的内容,欢迎大家下载更新喔。有任何意见或建议,可以通过留言、社区等渠道向我们反馈喔!