Cocos Creator 2.3.0 正式上线
2020.02.17 by Cocos
Cocos Creator 版本更新

Hi,各位开发者,经过长时间的开发和准备,Cocos Creator 2.3 终于正式发布啦。这个版本不仅移植了 Cocos Creator 3D 中的物理、碰撞和 3D 粒子系统,还升级到了和 3D 引擎一致的正式版本材质系统,能够胜任更多品类的游戏开发!

从 v2.0 用 3D 渲染器重写、v2.1 开放 3D 能力至今,Cocos Creator 缺失的 3D 能力已经在迭代中逐步补齐。我们希望能够帮助中小团队开发出惊艳的 3D 休闲项目,并且保留 Creator 做为 2D 引擎轻量高效的优势,这是现阶段 Cocos Creator 和 Cocos Creator 3D 的主要区别。

与此同时,与 3D 引擎更多模块的统一,也是 2D 和 3D 两个产品线完全融合的开始。在不久的将来,Cocos Creator 将会整合两个引擎的优点,提供卓越的 2D/3D 游戏开发体验。以下是 2.3 完整更新说明:

重点更新 

支持发布到趣头条小游戏

Cocos Creator 2.3 正式支持了发布到趣头条小游戏这个全新平台!由于 Creator 为开发者抹平了平台之间的差异,开发者发布到趣头条小游戏就和发布到其余平台一样轻松。关于平台接入的详细步骤,请查阅《发布到趣头条小游戏》

支持 3D 物理系统

和 Cocos Creator 3D 一样,Creator 的物理引擎基于 cannon.js 实现,并为用户提供了高效的组件化工作流程和便捷的使用方法。目前支持了刚体、Box/Sphere 碰撞组件、触发和碰撞事件、物理材质、射线检测等特性。详细说明请参考文档

支持 3D 碰撞系统

和 Cocos Creator 3D 一样,Creator 提供了轻量的碰撞检测系统 Builtin。Builtin 是仅有碰撞检测系统的物理模块,相对于其它的物理引擎,它没有复杂的物理模拟计算,这将使得游戏的包体更小并且性能更佳。详细说明请参考文档

支持 3D 粒子系统

3D 粒子的实现基本与 Cocos Creator 3D 一致,功能强大,支持在编辑器中调试预览。

目前提供了包括 Shape、Color、Velocity、Size、序列帧、拖尾等数十个模块选择,可以组合出各类粒子效果。

目前提供了 Constant、Curve、Two Constant、Two Curve、Gradient 等多种参数的设置方式。

详细说明请参考文档

升级材质系统到正式版

Creator 的材质系统最初是在 2.1.1 加入的,但是一直在编辑器中被标记为实验性功能,也缺乏相关文档。经过一段时间的迭代,这次终于升级到了正式版!这个版本的 Effect 编译语法和 Cocos Creator 3D 保持一致,可以使用 VS Code 的 Cocos Effect 插件进行编写,只是内置的一些 shader 变量名字有些区别。之前在旧版 Creator 中对材质进行过定制的开发者们,可以根据文档尝试升级到正式版,如果有遇到困难可以在论坛发帖求助。

新版材质系统的特性如下:

  • 支持修改材质时在场景中实时预览修改的结果
  • 支持材质变种和 Effect 变种,对 2D 游戏更加友好
  • 支持材质包含多 Technique
  • 支持设置材质的 Technique, Pass, Property 名称

详细说明请参考文档

支持 Spine 与 DragonBones 挂载节点

在播放骨骼动画时,开发者常常需要在骨骼动画的某个部位上挂载节点,以实现节点与动画联动的效果。在 Creator 2.3 中只需要很简单的操作,就可以将任意节点挂载到骨骼动画,节点会跟随动画进行变换,用于实现挂点效果,也可以在节点上添加碰撞组件来实现碰撞检测!详细说明请参考文档

支持 Spine 二进制资源格式

在 2.3 中,我们把 Spine 运行库升级到了 3.8,支持了导入 Spine 的 skel 二进制格式。skel 格式的用法和原先的 JSON 格式一致,但是文件体积更小,加载更快!

支持构建时只重新编译脚本

在构建面板中,如果之前已经成功构建过项目,第二次构建时就可以勾选”只构建脚本”。勾选后的构建将复用上一次构建好的引擎和资源,只对脚本进行重新编译,将会极大方便调试!这是一个在社区中呼声很高的特性,非常感谢大家的建议。

场景编辑器添加了 3D 查看选项

其它重要特性

  • 属性检查器支持资源的多选批量设置
  • 支持切换单点与多点触控,使用 cc.macro.ENABLE_MULTI_TOUCH 宏进行设置 #5847
  • Label 组件在使用 ttf 或系统字体时支持粗体斜体以及下划线设置
  • RichText 新增 <img> 的垂直对齐属性 align 和偏移属性 offset,详见文档(感谢 RazgrizHsu#6017

Improvements

Engine

  • 优化节点设置 zIndex 时的性能 #5899
  • 减小微信、百度、小米、支付宝小游戏平台的包体大小 100KB
  • 移除动态合图的最小尺寸限制,尽可能减少 DrawCall #5944
  • 优化原生加载图片的性能(感谢 wbenlong)#2035
  • 加载子包的 API loadSubpackage 支持传入进度回调 #15
  • RichText 支持设置 Label 的缓存模式,可减少 DrawCall、优化性能
  • 优化 Label 的 OverFlow 设置为 SHRINK 时的性能 #5914
  • Toggle 通过脚本修改 isChecked 状态,2.3 新建项目将不触发事件,旧项目行为不变
  • 支持 Spine 部件贴图拆分,增强换装功能 #5711
  • 引擎代码支持使用 TypeScript 编写
  • 优化骨骼动画私有缓存模式 #6133

Editor

  • 场景编辑器支持使用 F 快捷键聚焦节点
  • 动画编辑器添加 Backspace 快捷键用于删除动画帧
  • 完善节点多选批量设置,增加多选添加组件功能

Engine

  • 修复 3D 物体的阴影渲染错误问题 #5940
  • 修复节点销毁时无法强制注销所有监听事件的问题(感谢 ssyyhm) #5985
  • 修复 cc.game.once 多次触发的问题 #6055
  • 修复调用 getBoundingBoxToWorld 之后导致节点矩阵不正确的问题 #6108
  • 修复 Label 使用 BMFont 时无法动态合批的问题 #5860
  • 修复 Label 节点 Overflow 为 NONE 时,同时使用 Widget 组件会导致性能低下的问题 #5908
  • 修复 RichText 使用描边时的内存泄露
  • 修复纹理压缩导致 TiledMap 地表层渲染错误的问题 #5999
  • 修复 TiledMap 地图为非对称形状时,包围盒计算不正确的问题 #5916
  • 修复 TiledMap 的 API getPositionAt 返回值不正确的问题 #5880
  • 修复 Mask 嵌套时,点击事件穿透的问题 #5749
  • 修复 ScrollView 旋转后,检测滚动方向错误的问题 #6102
  • 修复通过滚轮滚动 ScrollView 无法触发 scroll-end 事件的问题 #5814
  • 修复 PageView 在超出边界时进行快速二次拖动,会导致页面跳转错乱的问题 #6015
  • 修复 PageView Indicator 显示错误的问题 #6123
  • 修复粒子系统图片被拉伸为正方形的问题 #5897
  • 修复粒子文件解析 positionType 错误的问题 #5946
  • 修复 Graphic 中途画的点与起点重合后,后面画的点都会自动 close 的问题(感谢 chocol)#6002
  • 修复 WheelJoint 组件设置 Frequency 报错的问题 #6000
  • 修复当 Camera 的 Align With Screen 为 false 时,orthoHeight 计算错误的问题 #6139
  • 修复 VideoPlayer 展示本地视频时,设置 Keep Aspect Ratio 无效的问题 #6138

Native

  • 修复频繁创建 3D 模型导致崩溃的问题 #2056
  • 修复加载图片失败后没有回调的问题 #2077
  • 修复加载同名的远程音频时,会使用本地缓存的问题 #219
  • 修复 Spine、DragonBones、粒子切换父节点后合批失效的问题 #1993
  • 修复 Camera 渲染多个 Stage 报错的问题 #1897
  • 修复 Spine setAttachment 接口无效的问题 #1992
  • 修复 EditBox 输入表情崩溃的问题 #2021
  • 修复 TiledMap 动态加载时渲染异常的问题 #229
  • 修复 iOS 平台与 Mac 平台的文本排版跟 Web 不一致的问题 #1960
  • 修复 iOS 在双击 home 键游戏没有暂停的问题 #1947
  • 修复 iOS 从后台切换前台 glContext 没切换导致崩溃的问题 #2083
  • 修复 Android Instant 构建时文件没有更新的问题 #2067
  • 修复 WebSocket 在 Android 64机型上崩溃的问题 #2074

Mini Game

  • 修复场景延时加载时,VideoPlayer 无法播放的问题 #72
  • 修复 EditBox 长度设置为负值时无效的问题 #60
  • 修复微信上加载音频无响应的问题 #52
  • 修复微信上使用卡通材质渲染错误的问题 #6008
  • 修复微信小游戏 VideoPlayer 播放时,隐藏视频没有暂停播放的问题 #82
  • 修复 vivo 平台上 languageCode 未定义的问题

Web

  • 修复浏览器自动旋转后,Widget 没有正确适配的问题 #6061
  • 修复 UC 浏览器全屏下无法用手指缩放的问题 #5863
  • 修复 IE 浏览器上 VideoPlayer 在退出全屏后位置错误的问题 #5827
  • 修复 QQ 浏览器获取鼠标位置不对的问题 #5604
  • 修复 Safari 浏览器在滚动后,触摸事件错误的问题 #5907
  • 修复 Safari 存在导航栏时显示错误的问题 #5926

Editor

  • 修复动画编辑器切换同名节点时动画错误的问题
  • 修复动画编辑状态下切换至游戏预览面板,预览面板无法显示的问题
  • 修复矩形变化工具设置中心点计算错误的问题
  • 修复设置 Canvas 的 resolution 属性,场景中未能即时更新的问题
  • 修复场景编辑器的 Canvas 线框会被其他节点遮挡的问题
  • 修复无法使用键盘切换节点的问题
  • 修复切换至没有动画组件的节点,动画编辑器显示错误的问题
  • 修复 Color Picker 无法保存颜色预设值的问题
  • 修复切换项目后运行,模拟器分辨率没有切换的问题
  • 修复使用命令行构建失败的问题
  • 修复原生平台剔除 Audio 模块无法构建的问题
  • 修复自动图集没有纹理时,构建失败的问题
  • 修复拷贝工程后,构建失败的问题
  • 修复 Effect 文件名称使用数字开头报错的问题
  • 修复多开编辑器,切换编辑器出现闪屏的问题
  • 修复 TypeScript import 失败的问题
  • 修复编辑器安装在中文路径时,编辑器无法打开的问题
  • 修复导入模型失败的问题
  • 修复 Windows 上构建小米游戏新建证书失败的问题 
  • 修复增加碰撞体组件后无法拖拽节点的问题
  • 修复纹理只有三通道时,选择使用 pvrtc-4bits-rgb-seprate-a 压缩纹理引起的图片失真
  • 修复网页预览时 ShowFPS 按钮状态未保存的问题

BREAKING CHANGE

  • cc.Mat4.translate 方法不再支持旋转变换,仅支持纯位移变换,如需支持旋转请使用 cc.Mat4.transform 代替。

KNOWN ISSUE

  • 直接 require node_modules 的写法在 2.3.0 暂时不可用,下个版本将会修复。目前建议对外部库单独编译并使用插件脚本导入。

DEPRECATION

  • 从 v2.2.0 开始,我们不再建议您使用节点的 Skew 功能。Skew 通常用作在 2D 引擎中模拟 3D 效果,随着 Cocos Creator 对 3D 节点的深入支持,Skew 效果已经完全可以由 3D 节点来实现。所以为了统一使用体验,进一步优化引擎底层实现,我们废弃了 Skew 属性。不过我们依旧会保留一段时间内的向下兼容,开发者可在旧项目中延续原有做法。后续我们将进一步完善兼容方式和升级案例,择机正式移除 Skew 功能。

升级提示

Cocos Creator 对项目的升级操作是不可逆的,请在升级前提交或备份旧版项目。开发中的项目通常可无缝升级,但因为项目难免存在特殊性,开发者应该根据项目自身需求,进行新版本引擎进行技术评估。如果开发者们在升级中遇到困难,欢迎向我们反馈,我们会尽力协助。此外,出于稳定性考虑,建议即将上线或已上线的项目谨慎升级。

从 < 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.0 - 2.3.0 版本升级

从 2.3.0 开始,Canvas 组件不再负责将 Canvas 节点尺寸设为屏幕大小,此行为将结合 Widget 组件实现。为保证兼容性,2.0 项目升级后,Canvas 所在节点会自动添加 Widget 组件。(从 1.0 项目升级无此问题)

从 < 2.2.0 版本升级

从 2.2.0 开始,我们强化了内存管理机制,现在要求用户通过代码动态创建且独立于场景节点树的 cc.Node 必须通过 destroy() 释放,否则引擎无法知道何时回收这类节点的内存,会导致内存泄露。
此外,手动从场景中移除的节点,在不需要用到的时候也需要统一 destroy。如果通过 cc.NodePool 管理节点,则不受影响。

// 假设 testNode 是场景中的某个节点,若之前被手动移出场景了,如testNode.parent = null;
// 或者
testNode.removeFromParent(true);
// 或者
parentNode.removeChild(testNode);
// 若往后 testNode 还会再次用到,则无需手动 destroy 该节点
// 否则应该手动调用
testNode.destroy();

从 < 2.0 版本升级

打开 1.x 项目的话,场景等所有资源将会自动升级,代码如有警告或报错,可参考《1.10.0 资源升级指南》《2.0.0 升级文档》进行调整。

以上就是  Cocos Creator 2.3.0 此次更新的详细内容,我们欢迎大家继续提供反馈,以便更好地为你们服务。

Cocos Creator 2.3.0 下载:https://www.cocos.com/creator

Cocos Creator 社区:https://forum.cocos.org/