Cocos Creator 2.3.0 更新说明

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 完整更新说明。为保证阅读体验,[参考链接]统一放在文末哦~

重点更新

1.支持发布到趣头条小游戏

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

2.支持 3D 物理系统

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

3.支持 3D 碰撞系统

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

4.支持 3D 粒子系统

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

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

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

详细说明请参考文档[3D粒子]。

5.升级材质系统到正式版

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

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

支持修改材质时在场景中实时预览修改的结果

支持材质变种和 Effect 变种,对 2D 游戏更加友好

支持材质包含多 Technique

支持设置材质的 Technique, Pass, Property 名称

详细说明请参考文档[材质系统]及[Effect]。

6.支持 Spine 与 DragonBones 挂载节点

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

7.支持 Spine 二进制资源格式

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

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

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

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

10.其它重要特性

属性检查器支持资源的多选批量设置

支持切换单点与多点触控,使用 cc.macro.ENABLE_MULTI_TOUCH 宏进行设置#5847

Label 组件在使用 ttf 或系统字体时支持粗体、斜体以及下划线设置

RichText 新增 的垂直对齐属性 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 对项目的升级操作是不可逆的,请在升级前提交或备份旧版项目。开发中的项目通常可无缝升级,但因为项目难免存在特殊性,开发者应该根据项目自身需求,进行新版本引擎进行技术评估。

如果开发者们在升级中遇到困难,欢迎向我们反馈,我们会尽力协助。此外,出于稳定性考虑,建议即将上线或已上线的项目谨慎升级。

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

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

3.从 < 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();

4.从 < 2.0 版本升级

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

参考链接

[发布到趣头条小游戏]

https://docs.cocos.com/creator/manual/zh/publish/publish-qutoutiao-mini-games.html

[3D物理与碰撞系统]:

https://docs.cocos.com/creator/2.3/manual/zh/physics-3d/

[设置3D物理引擎]:

https://docs.cocos.com/creator/2.3/manual/zh/physics-3d/physics-select.html

[3D粒子]:

https://docs.cocos.com/creator/2.3/manual/zh/3d/particle-system-3d.html

[材质系统]:

https://docs.cocos.com/creator/2.3/manual/zh/render/material.html

[Effrct]:

https://docs.cocos.com/creator/2.3/manual/zh/render/effect.html

[Spine组件参考]:

https://docs.cocos.com/creator/2.3/manual/zh/components/spine.html#spine-挂点

[文档]:

https://docs.cocos.com/creator/2.3/manual/zh/components/richtext.html

[RazgizHsu]:

https://github.com/RazgrizHsu

由于文章限制,只能列举部分链接,前往获取全部链接。

以上就是 Cocos Creator 2.3.0 此次更新的详细内容。

我们欢迎大家继续提供反馈,以便更好地为你们服务。

3赞

前排:grin:

请问如何给shader传递顶点数据?

vs中的a_position么?
in vec3 a_position;
gl_Position = cc_matViewProj * vec4(a_position, 1);

1赞

我想传递1000个顶点数据做特效.
webgl.bufferData(webgl.ARRAY_BUFFER, new Float32Array([ 0, 0, 0, 0.5, 0.7, 0,15,25,…]) , webgl.STATIC_DRAW); 这样的.

啥意思? 是说ccc3d将来要并入到ccc么?

两者会合并的

现阶段cocos3d 和cocos2.3版本有什么不同吗?

两者都能做 3D 游戏,但是 2.x 比较轻量一些,2D 支持比较好。3D 比较次世代一些,2D 支持还没那么完整。

更新到2.3.0版本后,使用模拟器运行,发现了以下报错,麻烦引擎组大佬看看:
Simulator: E/jswrapper (272): ERROR: Uncaught TypeError: Cannot read property ‘0’ of null, location: jsb-adapter/jsb-engine.js:0:0
STACK:
[0]cc.PrivateNode._posDirty@jsb-adapter/jsb-engine.js:5688
[1]disableRender@src/cocos2d-jsb.js:27427
[2]314.RenderFlow.validateRenderers@src/cocos2d-jsb.js:46919
[3]RenderFlow.render@jsb-adapter/jsb-engine.js:5849
[4]render@src/cocos2d-jsb.js:46730
[5]mainLoop@src/cocos2d-jsb.js:17540
[6]callback@src/cocos2d-jsb.js:17780
[7]tick@jsb-adapter/jsb-builtin.js:2156
E/jswrapper (562): [ERROR] (f:\jenkins\workspace\creator_2d\cocos2d-x-lite\windows\cocos2d-x-lite\cocos\scripting\js-bindings\jswrapper\v8\object.cpp, 562): Invoking function (199EE468) failed!
at HTMLElement.print-simulator-log (D:\CocosCreator_2.3.0\resources\app.asar\editor\builtin\scene\panel\messages\scene.js:1:1608)
at Object.e._dispatch (D:\CocosCreator_2.3.0\resources\app.asar\editor-framework\lib\renderer\panel.js:1:1876)
at EventEmitter. (D:\CocosCreator_2.3.0\resources\app.asar\editor-framework\lib\renderer\ipc.js:1:2952)
at EventEmitter.emit (events.js:194:13)
at EventEmitter.emit (domain.js:469:20)
at EventEmitter.topLevelDomainCallback (domain.js:124:23)

这个问题很有可能是因为启用了动态图集,但是并没有禁用 CLEANUP_IMAGE_CACHE 导致的。我们这两天会更新一下相关文档,谢谢反馈。

很赞,辛苦了!

大佬,应该不是这个问题,上一个版本都没问题的,我设置这两个都禁用了,也还是报错:
2020-02-18T07:57:54.148Z - warn: Simulator: libpng warning: iCCP: known incorrect sRGB profile
E/jswrapper (272): ERROR: Uncaught TypeError: Cannot read property ‘0’ of null, location: jsb-adapter/jsb-engine.js:0:0
STACK:
[0]cc.PrivateNode._posDirty@jsb-adapter/jsb-engine.js:5688
[1]disableRender@src/cocos2d-jsb.js:27427
[2]314.RenderFlow.validateRenderers@src/cocos2d-jsb.js:46919
[3]RenderFlow.render@jsb-adapter/jsb-engine.js:5849
[4]render@src/cocos2d-jsb.js:46730
[5]mainLoop@src/cocos2d-jsb.js:17540
[6]callback@src/cocos2d-jsb.js:17780
[7]tick@jsb-adapter/jsb-builtin.js:2156
E/jswrapper (562): [ERROR] (f:\jenkins\workspace\creator_2d\cocos2d-x-lite\windows\cocos2d-x-lite\cocos\scripting\js-bindings\jswrapper\v8\object.cpp, 562): Invoking function (099F9028) failed!

E/jswrapper (272): ERROR: Uncaught TypeError: Cannot read property ‘0’ of null, location: jsb-adapter/jsb-engine.js:0:0
STACK:
[0]cc.PrivateNode._posDirty@jsb-adapter/jsb-engine.js:5688
[1]disableRender@src/cocos2d-jsb.js:15331
[2]231.C.validateRenderers@src/cocos2d-jsb.js:31381
[3]RenderFlow.render@jsb-adapter/jsb-engine.js:5849
[4]render@src/cocos2d-jsb.js:31218
[5]mainLoop@src/cocos2d-jsb.js:6370
[6]t@src/cocos2d-jsb.js:6602
[7]tick@jsb-adapter/jsb-builtin.js:2156
E/jswrapper (562): [ERROR] (E:\P1\clientjs_fo\engine\frameworks\cocos2d-x\cocos\scripting\js-bindings\jswrapper\v8\Object.cpp, 562): Invoking function (0CB56AE0) failed!

都是这些报错,不知道怎么找。。。

++1,也遇到了同样的问题

jswrapper: ERROR: Uncaught TypeError: Cannot read property ‘0’ of null, location: jsb-adapter/jsb-engine.js:0:0
STACK:
[0]cc.PrivateNode._posDirty@jsb-adapter/jsb-engine.js:3369
[1]disableRender@src/cocos2d-jsb.js:12919
[2]177.T.validateRenderers@src/cocos2d-jsb.js:25299
[3]RenderFlow.render@jsb-adapter/jsb-engine.js:3530
[4]render@src/cocos2d-jsb.js:25136
[5]mainLoop@src/cocos2d-jsb.js:4982
[6]t@src/cocos2d-jsb.js:5214
[7]tick@jsb-adapter/jsb-builtin.js:2156

真机和模拟器都会报这样的,跟了一下午,大概是再destroy节点的时候报错了

2.2.2还会更新吗 会有2.2.3吗?因为 做的游戏都是2D的 但是对原生要求又很高 所以想停留在2.2.x 但是升级了2.3又怕有新的bug 2.2.2有出现的bug可以在2.2.2的基础上 修复一个2.2.3出来吗 我在想 应该蛮多人都有我这样的想法

建议原生先别升级2.3,等等2.3.1或2.3.2之类的