好消息是 Cocos Creator 2.4.3 正式版终于来啦!我们带来了很棒的新特性以及性能提升,例如支持 Prefab 的嵌套使用和 Android x86_64 的支持等,希望能一定程度抚慰大家返工沉重的心情和体重。
此外,本次更新修复了 2.4 版本以来的所有问题,提升了编辑器稳定性,希望大家使用起来更加得心应手、事半功倍。建议所有开发者做好相关备份工作升级喔!
What's new
- 支持 Prefab 嵌套
支持在 Prefab 中嵌套使用其他 Prefab,减少重复资源数量,更加利于维护与更新。
- 新增对 Android x86_64 支持
Android 平台可选择 x86_64 进行构建,构建之后可在更多设备与模拟器上运行。
- 模拟器增加是否清空缓存的选项
Improvements
优化构建后 JSON 文件大小,配合合并所有 JSON,最多能减少 30% JSON 体积
升级物理引擎 Cannon 版本到 1.1.1
原生平台支持下载远程资源失败后使用断点续传[#345]
优化编辑器导入 Plist 资源速度
优化编辑器下执行 cc.resources.load 性能
支持加载存储空间中的 Asset Bundle [#153]
Engine
[CORE] 修复 SpriteFrame 的 clone 方法中共享属性的问题 [#7030],感谢大城小胖
[CORE] 修复 editorOnly 作用于资源属性时,资源无法从构建中剔除的问题 [#7048]
[CORE] 修复 cc.Quat.rotateX, cc.Quat.rotateY, cc.Quat.rotateZ 计算结果可能不正确的问题 [#7036]
[CORE] 修复 setPosition 与 setScale 不传入 z 值,z 值重置为 0 的问题 [#7104],感谢大城小胖
[AUDIO] 修复 AudioSource 无法获取 duration 的问题 [#7035]
[AUDIO] 修复 AudioSource 组件勾选 loop 和 mute 无效的问题 [#6935]
[AUDIO] 修复切换场景时,音频没有停止播放的问题 [#7317]
[PARTICLE] 修复粒子系统 InputAssembler 没有清空的问题 [#7060],感谢 caogtaa
[PARTICLE] 修复粒子系统组件无法切换图集中其他 SpriteFrame 的问题 [#7000]
[LABEL] 修复 Label 渲染出现一些突刺的问题 [#7132]
[LABEL] 修复 LabelOutline、LabelShadow、MotionStreak 组件的 color 属性共享的问题 [#7027]
[LABEL] 修复在 start 里修改 Label 颜色无效的问题 [#7018]
[LABEL] 修复 BITMAP 模式下的文本隐藏时修改 string 属性无效的问题 [#7003]
[PHYSICS] 修复刚体一旦进入休眠,使用其他刚体撞击,无法产生碰撞效果的问题 [#7119]
[CAMERA] 修复在没有摄像机时渲染 EditBox, VideoPlayer, WebView 崩溃的问题 [#332]
[CAMERA] 修复 onLoad 函数中,获取不到摄像机正确尺寸的问题 [#7073]
[WIDGET] 修复 widget 设置为 ON_WINDOW_RESIZE 时, 当使用 setContentSize 时,没有更新的问题 [#7275]
[ASSET] 修复多次加载同一 Asset Bundle,加载失败的问题 [#7424]
[ASSET]修复连续调用 loadRemote 加载同一张图片,加载失败的问题 [#6941]
[ASSET] 修复加载资源失败后,progress 回调还在执行的问题 [#7121]
[ASSET] 修复 Bundle.load 传入数组时,返回值不是数组的问题 [#6923]
[ASSET] 修复脚本加载顺序可能不正确的问题 [#7065]
[ASSET] 修复延迟加载时,无法切换 Sprite.spriteFrame 的问题 [#7233]
[ASSET] 修复项目脚本中过早调用 cc.resources , 提示不存在的问题
****Native****
修复 Android 平台 SafeArea 组件宽高不对的问题 [#2562]
修复 Android 旋转后没有重新计算 SafeArea 的问题 [#337]
修复 iOS 设备屏幕翻转后,重力感应不对的问题 [#2791]
修复 iOS 设备方向设置为 upside down,显示错误的问题 [#2787]
修复 iOS 平台在 LaunchScreen 画面的时候,立即旋转,可能出现触摸坐标异常的问题 [#309]
修复 Android 4.4 以下崩溃的问题 [#2532],感谢 deyongzhong
修复潜在的内存泄漏和空指针问题 [#2512],感谢 quink-black
修复弹出和收回 EditBox 导致屏幕宽度改变的问题 [#2630]
修复 iOS 端 EditBox 编辑文字,光标自动跳转到末端的问题 [#2669]
修复 iOS 下 EditBox 韩文联想被打断的问题 [#2669]
修复下载资源失败后临时文件没有被删除的问题 [#2629]
修复 iOS 上缓存资源路径拼接错误的问题 [#311]
修复加载远程服务器上的 spine 和 dragonbone 无法显示的问题 [#322]
修复 Dragonbone 崩溃的问题 [#351]
新增 ENABLE_NATIVE_TTF_RENDERER 宏用于控制是否使用原生渲染器进行 ttf 字体的渲染 [#7053]
修复原生平台无法开启 mipmap 的问题 [#2689]
修复原生平台聚光灯渲染错误的问题 [#2695]
修复 async 函数中的异常不会打印的问题 [#328]
修复 iOS VideoPlayer 跳转不准确的问题[#2531],感谢 goesByhc
修复 VideoPlayer.play 在视频未加载完成时调用,不会播放的问题 [#329]
修复调用 CallStaticObjectMethod 出现异常闪退的问题 [#2706]
修复原生平台 cc.game.restart 报错的问题 [#347]
修复原生平台 ttf 资源放远程服务器上加载失败的问题 [#7380]
****Editor****
修复在编辑器中给对象添加 DontSave 私有标记时 undo 会报错的问题
修复编辑器下 cc.resources.loadDir 返回值与运行时不一致的问题
修复预览时加载 Asset Bundle 中所有资源报错的问题
修复设置 Bundle 为合并所有 JSON 文件后,无法完全合并 JSON 文件的问题
修复罕见的情况下场景或预制中的 RichText 数据如有问题时会导致编辑器崩溃的问题
修复 timeline 面板弹出的时候,加载不到动画的问题
修复在编辑器中修改 SphereCollider3D 的 center 值,gizmo 没有更新的问题。
完善编辑器 UI
修复预览构建后的项目,可能会出现加载失败的问题
修复导出资源时没有导出依赖资源的问题
修复插件中的 auto-atlas 无法构建的问题
修复动画编辑器添加的帧事件参数为 boolean 类型数值为 false 的时候出现无效的问题
修复没有勾选物理模块时,预览报错的问题 [#7075]
****Mini Game****
修复小游戏在软键盘拉起状态下,切换输入框,导致输入状态混乱的问题 [#136]
修复 loadRemote 无法加载临时目录中的图片的问题 [#155]
修复微信上,XHR 无法设置 timeout 属性的问题 [#164]
修复部分小游戏平台,音频播放失败的问题 [#7341]
Web
修复火狐浏览器点击视频无法暂停播放的问题 [#7372]
修复 iOS14 设备上帧率过低的问题 [#7415]
升级提示
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 时会执行 instant: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 升级文档] **进行调整。
以上就是本次更新的内容,欢迎大家戳“阅读原文”查看完整链接并下载更新,有任何意见或者建议,可以通过论坛等渠道向我们反馈哦!虽然大家心里可能只有一个念头: