一眨眼假期就过了,但是 Cocos Creator 2.4.3 来啦!

2020.10.9 产品动态 by Cocos

今天是返工第一天,告诉大家一个噩耗,你已经过完了 2020 年所有法定节假日!此时萦绕在心里的只有一个念头:为什么正义都能迟到,上班却不能呢?

好消息是 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 是场景中的某个节点,若之前被手动移出场景了,如

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 升级文档》进行调整。

以上就是本次更新的内容,欢迎大家下载更新,有任何意见或者建议,可以通过论坛等渠道向我们反馈哦!虽然大家心里可能只有一个念头: