cocoscreatorv2.2.0 (cocos creator和unity哪个更好)

Cocos Creator v1.6 版本发布了!感谢社区对这个版本漫长测试周期的耐心等待和对测试版的积极试用和反馈。我们在这个版本更新中继续保持了优化性能和提升体验的传统,并且这个版本还是后续一系列重要的引擎进化的开始。

我们希望改善开发者编辑器使用体验的同时,不断提升JS和C++引擎的性能,解决开发者最关心的包体、缓存、网络通讯等问题。基于这个目标,我们在v1.6版本中加入了下列重要功能。

特色功能

-JavaScript-Binding绑定层升级,大幅提升安卓平台性能

-预览游戏时脚本免打包,改动脚本后瞬间刷新游戏

-批量编辑节点和组件属性

-web平台构建时自动将版本加入资源文件名

-升级iOS平台的WebSocket库,解决大部分平台专属网络通讯问题

JavaScript-Binding绑定层全面升级

在这个版本中,我们升级了从JavaScript脚本到原生平台C++绑定的中间层,一方面我们将原生平台使用的JavaScript引擎SpiderMonkey从v33版本升级到了v52版本,大幅度提高了安卓平台的JavaScript运行性能(由于iOS平台上不支持开启JIT所以效果并不明显);另一方面我们在这个版本开始对绑定层接口进行重构,目标是:

-提供完全抽象的JSB绑定层API,独立于JavaScript引擎,用户的绑定代码将不再受未来JS引擎升级影响

-支持平台原生的JS引擎,包括Android平台的v8,iOS平台的JavaScriptCore。

在升级绑定层后,我们不仅为后续开发者的C++层绑定开发提供了稳定的环境,而且支持原生平台的JS引擎会使得构建原生版本时的包体大幅减小,因为不再需要将SpiderMonkey引擎库加入到发布版本中。

cocoscreator3.6入门教程,cocoscreatorv2.4.2

预览游戏时脚本免打包

由于脚本模块化加载的需要,我们从 Cocos Creator 第一个版本开始就对用户的脚本进行编译打包,但对于规模庞大、动辄几百个脚本的项目来说,每次修改任何脚本都会触发整个编译打包流程,会使得修改脚本后的等待时间非常长。为了解决这个问题,我们从 v1.6 开始引入了编辑器环境下脚本免打包的模块化系统,可以在预览环境下分别加载单个文件的脚本。对任何脚本的改动将只触发该脚本本身的编译流程,使得开发脚本后刷新预览的周期缩短到1~2秒,大大提升开发效率。

目前构建后的脚本仍然需要进行打包,因为终端浏览器里没有相应的加载环境。我们会在后续继续研究构建发布时也能保持每个脚本文件独立存在的构建模式,来方便需要分别更新脚本的开发者更容易部署游戏版本。

cocoscreator3.6入门教程,cocoscreatorv2.4.2

批量编辑节点和组件属性

编辑UI场景时,经常会遇到需要选中一些节点并批量修改他们的一些属性的需要,这个版本我们加入了属性检查器的批量编辑功能。

多选节点后这些节点上共享的组件和属性就可以进行批量编辑了,当不同节点的某个属性值不同时,选中这些节点后,属性检查器上这个属性值会显示为-,修改这个属性会让所有选中节点上该属性都变成同样的值。

cocoscreator3.6入门教程,cocoscreatorv2.4.2

web平台构建时为资源文件名加入版本号

对H5游戏开发者来说,有效利用浏览器的缓存机制,避免用户重复*载下**资源,并且在更新游戏资源时确保更新缓存的资源版本是非常重要的。我们在这个版本的构建发布面板里增加了**md5cache**构建选项,勾选后会在构建时为所有资源文件名增加该文件的md5码。这样在更新游戏版本时,根据文件名的不同,用户的浏览器会自动重新*载下**md5改变了的资源,在最大限度使用缓存节省流量的情况下确保版本的一致性。

iOS平台上使用SocketRocket代替之前的WebSocket实现

我们用 facebook 开发的 [SocketRocket 库](https://github.com/facebook/socketrocket) 替换了之前一直在 cocos2d-x 和 Cocos Creator C++ 引擎中使用的 libWebsocket 库,这个全新的实现支持以下特性:

-SocketRocket提供异步API,更符合通讯习惯

-封装了跨线程通讯

-网络状态变更时不会造成连接关闭

-锁定手机设备屏幕不再造成报错

-不再依赖包体较大的openssl库

-使用wss连接时不再需要本地CA根证书

后续版本中我们会对socket.io的原生实现也进行进一步的优化,希望能为开发者们提供一个简单、稳定的网络通讯编程环境。

完整改动列表

-[Audio][Breaking]修复`audioEngine.stop`会触发finish事件回调的问题,现在setFinishCallback设置的callback只有在自然*放播**结束的时候

编辑器

-[Editor]加入预览游戏时免编译脚本的模式,免编译模式下VSCode的调试配置需要通过开发者菜单更新

-[Editor]移除内置代码编辑器,默认双击文本文件时会使用系统默认的应用打开

-[Editor]修复Windows上编辑器运行路径和项目路径不在同一个驱动器时加载脚本路径错误的问题

-[Editor]修复导出场景资源时引用量过大可能导致卡死的问题

- [Editor] 修复 require 第三方库时的报错 `can not find module for path : undefined`

-[Editor]editor-input和editor-textarea控件添加maxLength支持

-[Editor]禁止弹出和关闭部分核心面板,包括场景编辑器、资源管理器和节点树。

-[Editor]修复TS脚本在重命名后,旧的不会删掉导致脚本名称重复的问题。

- [Editor] 修复场景保存时仍有 “Cannot read property ‘_prefab’ of null” 的报错

-[Editor]修复property装饰器在新版VSCode中的报错

- [Editor] 修复项目中脚本过多时会出现 `too many open files` 的问题

- [Editor] 修复编辑器中无法通过 url 加载资源依赖的 raw asset 的问题,修复编辑器无法正确加载 TSX 资源的问题

-[Editor]修复编辑器里脚本文件加载顺序不固定的问题

- [Editor] 修复切换场景编辑模式时可能出现 `Possible EventEmitter memory leak detected` 的报错问题

-[Editor]修复创建ToggleGroup时报错的问题

- [Editor] 修复选中编辑 plist 中的 spriteFrame 时可能 Sprite Editor 窗口会卡死的问题

-[Build]构建Web端时加入插入eruda的选项

-[Build]修复windows平台上构建web时使用md5cache报错的问题。

-[Build]构建时压缩和合并资源uuid,以优化settings.js资源索引文件的体积。

-[Build]修复某些项目会在build-raw-assets时卡住不动的问题

-[Build]修复构建非调试版本时settings.js未被压缩的问题

-[Build]修复构建时添加md5cache导致部分组件无法正确获取资源引用的问题

-[Build]修复构建Android时每次都会重新编译的问题

- [Build] 修复 TTF label 在使用 md5 cache 无法正确*载下**资源与加载字体的 bug

- [Build] 修复较低版本 Xcode 在编译 iOS/Mac 工程时可能遇到的 `undefined symbol: NSStreamNetworkServiceTypeCallSignaling` 编译失败问题

-[Build]在web构建面板上面添加md5Cache选项,为资源文件名增加md5编码,用于正确更新客户端资源缓存。

-[Build]修复构建项目时,粒子系统的plist所在目录下的所有贴图会被强制导出的问题。修复构建项目后粒子plist里引用的资源uuid和压缩后的uuid不符。

-[AnySDK]支持构建时动态添加AnySDK依赖,默认构建的工程不包含AnySDK代码。

-[ProjectSettings]引擎模块选择界面增加全选选项

-[Preferences]为偏好设置面板添加tooltip

-[AssetDB]修复jpg格式的贴图资源无法被删除或改名的问题

-[Properties]修复组件属性由数组类型改回普通类型时,属性检查器不会自动重置和刷新的问题

-[Properties]修复event-prop无法指定tooltip的问题

-[Properties]修复属性检查器上预览Markdown文件出错的问题

-[Properties]允许多选节点后在属性检查器里批量修改属性

-[Properties]修复Script内数据结构内继续嵌套array之后无法显示的问题

-[Properties]修复Properties查询超时后,面板停止了node的状态更新,直到重新点击node后,才重新启动更新的问题

-[Properties]修复在组件的脚本资源栏上点击无法跳转到脚本资源所在位置的问题

-[TypeScript]升级内置typescript编译器到2.4版本

-[Store]改进扩展商店*载下**体验,增加了安装失败和解压失败的时候的提示,使用扩展包名作为*载下**压缩包的文件名。

-[Store]插件商店产品描述支持markdown格式

-[Store]改进扩展商店体验

-修复重复*载下**文件的时候出现报错的问题

-加快删除文件夹的速度(之前用Utils.remove每个文件删除的时候都有延迟,只有删除watch的文件夹需要用)

-安装失败后,提示复制到某个文件夹后,自动打开这个文件夹

-把Editor.error统一换成Editor.warn

-增加安装完成后的提示

-统一整理了一下错误的打印消息,出现错误的时候,都会显示一个warn

-允许同时安装多个插件

引擎

-[Engine]添加`Node.insertChild`接口,用于插入节点到某一层级下特定位置。

-[Engine]使用SocketRocket第三方库代替原来iOS上的WebSocket实现

-[Engine]修复使用`evalstring`调用的方法返回类型为void时会出错的问题

- [Engine] 修复 Spidermonkey v52 在 iOS 模拟器上创建 TypedArray 崩溃的问题

-[Engine]修复loadResDir加载好的资源排序不稳定的问题

-[Engine]修复Mask的IMAGE_STENCIL模式在场景勾选延迟加载资源时失效

-[Engine]支持在项目中使用CC_BUILD和CC_DEBUG预编译宏

-[Engine]修复Mask的节点setContentSize无效果的问题

-[Engine]修复jsb不兼容TypeScript里的promise用法问题

- [Engine] Fix potential crash after WebSocket.close and send onclose event after onerror is received

-[Engine]移除引擎裁剪后残留在包体中的ZipUtils和TiledMap有关模块(减小核心包大小)

-[Engine]为SGLabel增加对象池,减少内存开销,提升反序列化效率。

- [Engine] Fix DebugInfos not included in jsb issue

- [Engine] Fix director event before update missing issue (user reported issue)

- [Engine] Increase default max batch vertex count (improvement)

-[Engine]修复`cc.game.restart`调用会导致崩溃的问题

-[Engine]只有在预览和调试模式下才获取webgl错误,减少发布版的性能损耗

-[Engine]修复`color.fromHEX`输出的颜色值不正确的问题

-[Engine]修复一个component有多个schedule的时候unschedule可能出错

- [Engine] 修复 XMLHttpRequest timeout 无法设置的问题

-[Engine]修复粒子和拖尾效果的z值不正确的问题

-[Engine]预览游戏切换场景时增加更多调试信息,包括场景资源uuid和初始化每一步骤所用的时间

-[Engine]创建新的Label渲染对象时,使用对象池而不是new

-[Engine]修复原生平台上使用LabelOutline时退出游戏会导致崩溃的问题

-[Engine]统一scheduler在web和原生的参数签名,必须使用6个参数或4个参数才能正确工作。

-[Engine]修复编辑器里加载粒子资源时报错的问题

-[Engine]修复`cc.game.restart`会导致Web平台崩溃的问题

-[Engine]升级了引擎编译时使用`gulp-uglify`版本,如果用了自己定制的引擎,需要同步引擎repo的`package.json`并重新安装最新依赖。

- [Engine] 修复 tint action 同时改变了 alpha,导致从 sgNode 同步 color 到 Node 过程中传递的 color.a 不等于 255 而报错的问题

- [Audio] 修复某些版本的 IE 11 在 audio 没加载完成的情况下,设置 currentTime 会报错的问题

-[Audio]修复AudioSource初始化时加载声音操作可能造成声音*放播**停止的问题

-[Audio]修复设置音量为0时无效的问题

- [Audio] 修复多条音轨同时*放播**并频繁调用 `_play2d(AudioCache *cache, int audioID)` 时的崩溃问题。

- [Audio] 修复 Audio DOM 模式在构建的时候执行 md5 cache 后,找不到资源的问题

-[Render]默认关闭脏矩形渲染优化,可以通过设置cc.renderer.enableDirtyRegion(true)来开启。

-[Action]解决ActionManager在update过程中删除action导致的报错,包括:salvaged状态去除之后,没有对正在执行(可能被移除)的action做保护;action被移除后(放入对象池)可能会立即被复用,导致ActionManager中的状态问题。

- [Action] 修复当 callFunc 的 target 为 null or undefined 时,jsb::Object 仍然会去 bind proxy 导致报错的问题

-[Action]修复带基本数据类型参数的callFunc创建崩溃

- [JSB] Improve setTimeout, setInterval implementation

组件

-[Label]优化BMFont解析速度,目前BMFont的解析直接在编辑器导入的时候就完成了,不需要运行时解析。

-[Label]拆分`setFontFileOrFamily`为`setFontFamily`和`setFontAsset`

-[Label]改进TTF字体的创建效率

-[BMFont]改进具有多张贴图的BMFont资源,在索引贴图时可能出现路径太长出错的问题

-[BMFont]修复在原本使用位图字体的组件上点击useSystemFont导致会出现2个Label的问题

-[RichText]修复禁用RichText组件或节点时没有反注册点击事件的问题

-[PageView]添加新属性pageTurningSpeed

-[Spine]支持Spine多骨骼之间的批处理渲染

-[Spine]修复Spine原生平台上使用addAnimation后动画可能无法正确*放播**的问题

-[Tiledmap]修复原生平台上TiledMap在使用getPropertiesForGID时,如果该图块没有设置CustomPropertie时会报错的问题

- [Tiledmap] 修复 Tilemap 不能正确被 camera culling 的问题

-[Tiledmap]添加到camera上的时候,退出场景时,camera无法清除Tiledmap的sgNode

- [Tiledmap] 开启 DepthTest 让 tiledmap Z 轴生效

-[Animation]修复修改sample属性时报错的问题

-[Animation]优化帧动画性能

-[Component]修复在包含渲染组件的节点上添加SpriteDistortion组件时的报错

-[Component]增加cc.BlockInputEvents组件便于遮挡UI事件

-[Particle]修复当粒子的file为null的时候无法导出资源的bug

-[Particle]修复endColorVar属性显示丢失的问题

-[Physics]修复使用Joint时由于调用destroy方法导致的崩溃问题

-[Physics]为PhysicsManager添加`enabledAccumulator`选项,用于提供固定时间的物理更新

- [Physics] 默认关闭添加 polygon collider 时就自动识别图片生成顶点,如果用户需要,可以通过点击按钮来生成顶点

-[VideoPlayer]修复VideoPlayer在构建的时候执行md5cache后,找不到资源的问题

强烈推荐小伙伴们*载下**升级v1.6版本,它解决了Creator用户一直以来迫切需要但又暂未处理的问题。升级完,记得到社区forum.cocos.com提交使用反馈哦!