Cocos Creator 2.4.4 更新说明

2021.2.1 产品动态 by Cocos

Cocos Creator 2.4.4 正式版来了,在 3.0 preview 版本发布后,引擎组正在全力攻坚 3.0 版本,希望能够统一 2D 游戏与 3D 游戏开发流程,提供更多更强大的功能特性。除此之外,引擎组将持续对 2.x 版本进行维护与优化,这次推出的 2.4.4 版本,支持了字节跳动小游戏子包功能,优化了运行时与开发过程,修复了 2.4 以来的相关问题,欢迎 2.x 用户进行升级与体验!

What’s New

  • 支持字节跳动小游戏子包功能

字节跳动小游戏正式支持子包功能,这将为开发者提供更多的发挥空间,Creator 也在第一时间开通对子包功能的支持。

Improvement

  • 优化原生 ttf 字体渲染[#2874]
  • 首场景分包与内置资源分包默认合并所有 JSON,提升加载速度
  • 在 MissingScript 组件上显示脚本信息,便于定位出问题的脚本 
  • 更新 TypeScript 版本到 4.1.3
  • 原生平台 XMLHttpRequest 支持 HEAD 请求类型[#3093]
  • 优化运行时计算材质 hash 值的消耗,感谢 大城小胖,[#7316]
  • Android 构建支持 gradle 5.x 版本[#3162]

Engine

  • [ASSET]修复构建后运行,预制体引用计数不准确的问题
  • [ASSET]修复加载资源时传入 maxRetryCount 参数无效的问题[#7689]
  • [ASSET]修复预加载图片无效的问题[#7581]
  • [ASSET]修复子包中的 Prefab 被主包复用时,运行时有可能导致组件脚本丢失的问题[#8001]
  • [PARTICLE]修复粒子系统颜色变化精度错误的问题,感谢 caogtaa,[#7532]
  • [PARTICLE]修复粒子组件替换 plist 文件时渲染贴图没刷新的问题,[#6994]
  • [TILEDMAP]修复 Tiledmap 透明度不正确的问题[#7898]
  • [TILEDMAP]修复 Tiledmap 未激活节点被渲染的问题[#7898]
  • [SPRITE]修复自动图集勾选 Allow Rotation 后 Sprite 显示错误的问题[#7501]
  • [SPRITE]修复 Sprite 使用 Mesh 模式不支持 flipX 与 flipY 的问题[#7407]
  • [LABEL]修复 Label 组件使用 BMFont 后切换 active 会出现黑块的问题[#7492]
  • [PHYSICS]修复节点下同时存在刚体节点和非刚体节点时,非刚体节点不会跟随父节点移动的问题[#7455]
  • [MASK]修复节点加入到节点树之前,增加 Mask 组件报错的问题[#7429]
  • [GRAPHICS]修复 Graphics 组件在绘制过程出现突刺的问题,[#7780]
  • [ANIMATION]修复当动画未播放时设置 sample 与 setCurrentTime 无效的问题[#7943]

Native

  • 修复原生平台绘制 Graphics 顶点达到一定数量后无法继续画图的问题[#2884]
  • 修复修改 Label 文本时,节点 size 没有变化的问题[#2834]
  • 修复 Spine 导出图集时选中 忽略空白图片 导致解析 .skel 二进制文件失败的问题[#2813]
  • 修复原生平台混合参数不生效的问题[#7839]
  • 修复原生平台 rayMesh 始终返回 infinity 的问题[#7795]
  • 修复原生平台 Sprite 使用 Mesh 模式渲染错误的问题[#362]
  • 修复原生平台 3d 节点 Mask 组件渲染异常的问题[#358]

Mini Game

  • 修复编辑器插件里的插件脚本在小游戏平台加载失败的问题
  • 修复微信平台部分机型从后台切回后,Label 消失的问题[#215]
  • 修复微信小游戏游戏过程中接电话后导致游戏卡住的问题 [#219]

Web

  • 修复 Safari 14 上性能下降的问题[#8192]
  • 修复 Web 平台密码类型输入框输入小写字母时却显示大写字母的问题[#7793]

Editor

  • 修复自动同步的预制关联根节点时的报错
  • 修复导入错误的 JSON 文件,编辑器无响应的问题
  • 修复嵌套 prefab 删除子节点后,保存失效的问题
  • 修复层级管理器上搜索 uuid 后,节点无法变化层级的问题
  • 修复命令行构建原生平台,MD5Cache 选项无效的问题
  • 修复预览时,引擎 sourcemap 错误的问题[#7609]
  • 修复编辑动画的曲线会出现无效的问题
  • 修复原生平台 SpriteFrame 的 json 文件无法合并的问题
  • 修复 Prefab 资源设置为 sync 模式时无法保存子节点的问题
  • 修复构建后的文件 hash 值发生改变的问题
  • 修复使用导出功能,材质和 FBX 没有导出依赖纹理的问题
  • 修复构建小米时,webp 文件无法打包的问题

升级提示

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