工欲善其事,必先利其器!在长达两个月的测试后,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 是场景中的某个节点,若之前被手动移出场景了,如
如原先通过 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 骨骼动画等功能。
开发者可以在立项前期对两个引擎进行充分的技术预研、压力测试,结合团队自身实际情况进行选择。
以上就是本次更新的内容,戳“阅读原文”前往官网下载更新喔。大家有任何意见或建议,可以通过留言、社区等渠道向我们反馈喔!
本文分享自微信公众号 - Creator星球游戏开发社区(creator-star)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。