LayaAir引擎版本号小数点后的第一位代表着大版本,其后是小版本。每一个大版本都代表着,引擎有着阶梯式的前进变化。时隔一个多月,2.4.0大版本的出炉又有着怎样的变化呢。本次版本的根本性变化在于易用性,易用性是LayaAir2.x引擎发展规划中与性能和3D功能相等位置的引擎核心理念。根据开发者的日常反馈,本次2.4.0 beta版对于易用性的优化,主要体现在3D引擎物理库的瘦身与内存相关优化、自定义材质优化,IDE编码模式的自由化、微信小游戏引擎插件适配的IDE内置、ES5编码转化需求的IDE内置等方面。下面我们分别介绍这些易用性功能的改变以及新增的3D功能。LayaAir 3D引擎的物理库是内置的是世界三大物理模拟引擎之一的bullet,该物理引擎功能丰富,应用广泛。集成到LayaAir引擎之后,由于近1.5M的引擎库体积,使得对包体有限制需求的开发者望而却步,基于开发者的诉求,2.4.0beta版开始,3D物理引擎库在保持原有功能不变的前提下,我们经过一系列的优化瘦身,3D物理引擎库JS版体积减少约48%,减少至780k,3D物理引擎库wasm版体积减少约55%,减少至450k。自此,使用3D物理引擎的产品升级至2.4.0+版本,可节省包体大小,且会缩短加载时长。
3D物理引擎库JS版为:
laya.physics3D.js
3D物理引擎库wasm版为:
laya.physics3D.wasm.js 、laya.physics3D.wasm.wasm
除此之外,2.4.0之前的JS版物理库对内存的使用,只能设置一个固定值。而2.4.0beta版本开始,3D物理JS版也与wasm版一样,对内存的使用是在设置的初始值基础上,再按实际需求自动增长,更加方便了开发者对于3D物理的内存管理。对于LayaAir引擎的Shader,只有在使用Shader时,引擎才会去编译。所以,Shader较为复杂时,有可能因编译导致显示卡顿。通过预先编译Shader,可避免因编译导致的卡顿。
在2.4.0beta之前的版本,预编译的着色器变种相关信息,只能是由开发者手动在控制台调试信息中通过复制粘贴提取。可以想象,这是一种低效的开发方式。
从2.4.0beta版开始,新增了Shader3D.debugShaderVariantCollection
属性,使用该属性,开发者就可以在加载预编译信息后,通过代码自动提取已存储的着色器变种相关信息。所以该功能的易用性也得到了较大的提升。
关于该功能的使用,可以查看官网文档。地址为:
https://ldc2.layabox.com/doc/?nav=zh-ts-4-22-7
在3D功能的自定义材质使用方面,也进行了易用性的优化。2.4.0beta版提供了公开的Material材质类,开发者自定义Shader时,无需继承Material材质类便可直接使用Material类来实现自定义材质。如此一来,开发者在不想封装并继承材质类时,可以直接通过new Material()
来使用材质类。不用再先创建一个自己的材质类,减化了编码流程,使用该功能时的编码效率会得到较大提升。当然,开发者也可以采用继承Material材质类的方式来实现,两种方式由开发者依据业务需求来灵活使用,引擎的自定义Shader不再强制开发者先创建自己的材质类。对于已经采用了继承BaseMaterial方式自定义材质的旧项目,升级到2.4.0beta及以后的版本,必须要更换为继承Material,否则会报错。讲到引擎升级注意的地方,顺便提一下,LayaAir2.4.0beta版本的着色器精度宏由“HIGHPRECISION”调整为GLSL内置宏“GL_FRAGMENT_PRECISION_HIGH” 。在2.4.0beta之前的版本里, 模型顶点数量超过65535时,需要拆分模型,这会导致渲染批次的增加。本次2.4.0beta版开始,对该处也进行了易用性优化,Mesh增加了IndexFormat.UInt32索引格式,再也不用拆分模型了,顶点数量的限制为UInt32数据类型,足够开发者使用。另外,3D引擎中,还优化了camera.normalizedViewport
范围小于(0,0,1,1)时的内存占用。以及,AnimatorPlayState增加了animatorState属性。还增加了CameraClearFlags枚举,让含义更明确。
缩减了粒子文件的尺寸。
支持导出索引为UInt32的Mesh。
优化了预览机制,不用每次预览时都重新加载。
增加在iOS平台环境下不能导出图片时的提示。
增加的动画PlayOnWake的判断,开发者可以自己控制是否默认播放动画。
一直以来,LayaAirIDE都是以内置VSCode编码工具用于LayaAir项目开发,好处是与项目的紧密度更好,创建项目后自动打开项目的编码模式,然而一个不太有利的地方,就是由于IDE整合时会对VSCode接口作出修改,且与IDE自有功能对接的耦合度比较高,导致更新VSCode工具版本与IDE整合的成本也比较高,所以LayaAirIDE不会轻易更新VSCode版本,这也会让一些开发者不能享受到VSCode新版本的功能,或者一些小问题不能得到及时通过更新VSCode处理。从2.4.0 beta开始,LayaAirIDE中,仍然可以创建项目、调起chrome运行、发布项目、管理项目。但编码工具是直接跳转到开发者自行安装的VSCode工具版本中,开发者无论使用任何VSCode版本,安装任何VSCode插件,都是开发者自由的选择,与LayaAirIDE不再有直接的关系。因IDE机制的原因,MAC版IDE,LayaAirIDE中启动编码模式,只能调起VSCode,无法自动打开项目
对于IDE的此次升级,还对IDE和项目模板做了一些瘦身,所以我们建议去官网下载全新的2.4.0 beta版本,采用升级的方式来更新到LayaAirIDE 2.4.0,将无法享受到IDE和新建项目时的瘦身好处。昨天,微信小游戏全量开放了引擎插件能力。开发者使用了微信小游戏的引擎插件后,当玩家曾体验的任何一款游戏中包括了该插件的相同版本引擎,都无需再次加载,直接调用已加载的微信公共插件库中的引擎版本。这样一来,可让加载效率得到较大的提升。而LayaAirIDE的2.4.0beta版内置了该引擎插件,并完美的做好了适配工作,除了AS版旧项目需要新增一个编译参数外,其它的都无需开发者手工适配,对于引擎插件的使用,仅需在发布微信小游戏时,勾选使用引擎插件的选项即可,其它诸如引擎插件使用配置与引擎包引用等,都由LayaAirIDE在发布时自动适配完成。开发者仍像原来开发普通项目一样即可。自2.2.0开始,引擎JS采用了主流的ES6标准,然而有一些开发者,为了兼顾少量的不兼容ES6平台,对升级版本产生了顾虑,其实,如果想兼容,开发者只需通过一个ES6转ES5的工具即可实现。为了方便开发者的使用,LayaAirIDE的2.4.0beta版本内置了Babel 7,在发布面板中增加了ES6转ES5选项,勾选即可使用。
勾选ES6转ES5后,生成的代码结构会产生变化,可读性变差,且不利于代码调试!
关于IDE相关优化,除了以上的功能外,还进行了一系列其它的易用性优化。例如:
发布微信、QQ、百度,发布页面可选不删除平台配置文件;
循环引用调整为warnning(log输出),提示更友好;
去掉TS实验版项目中的node_modules,使项目体积大幅减少;(需要下载全新2.4.0,不能直接更新升级到2.4.0)
命令行发布模式layaair2-cmd已经适配最新的发布平台。
本次的大版本,重点对易用性的提升上进行了集中性的优化与功能的增加。下次,依然围绕3D功能与3D渲染能力的提升展开。但对于易用性,我们反复强调,是2.x系列版本里比较重视的地方,欢迎开发者留言反馈,我们会针对开发者的使用痛点,积极进行优化调整。
推荐阅读:
科普:零基础了解3D游戏开发
应对苹果iOS新规,Layabox再次成功过审HTML5的APP包,同时推出iOS过审协助服务
LayaAir开始在GitHub实时提交了,2.3版支持任意多光源渲染, 3D效果华丽提升!3D导出插件支持Unity2018了!
重磅:LayaAir2.2将引擎源码全面切换至TypeScript,支持WebGL2.0,并增加大量3D实用功能
LayaAir 2.1.0 已废除Canvas API兼容,3D现有功能丰富与易用性再次加强!
LayaAir 2.0 正式版发布了,重要特性全面介绍