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

工欲善其事,必先利其器!在长达两个月的测试后,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():

 // 假设 testNode 是场景中的某个节点,若之前被手动移出场景了,如
    testNode.parent = null;
    // 或者
    testNode.removeFromParent(true);
    // 或者
    parentNode.removeChild(testNode);
    // 若往后 testNode 还会再次用到,则无需手动 destroy 该节点
    // 否则应该手动调用
    testNode.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 骨骼动画等功能。

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

 

以上就是本次更新的内容,戳“阅读原文”前往官网下载更新喔。大家有任何意见或建议,可以通过留言、社区等渠道向我们反馈喔!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值