自9月15日首次发布LayaAir 2.0 引擎测试版以来,历时4
个多月,推出了4
个2.0 beta版本,其中修复BUG若干,2D引擎与IDE优化与新增功能37
项,3D引擎与插件优化与新增功能26
项。在引擎组团队的不懈努力下,终于为开发者带来了2.0的稳定正式版。在此,也感谢大量参与测试和反馈BUG的开发者。
首先,先为大家介绍一下本次正式版最核心的几个更新:
2D引擎中,DrawCall数量多必然会引起性能下降。LayaAir引擎在图片的渲染方面做了很多优化,比如相邻的相同图集在渲染的时候,会自动合并起来一起渲染,这样就可以减少DrawCall的数量。然而,如果UI使用时将不同图集或文本穿插必然会打断图集的合并渲染。造成因开发者使用不当而产生的不必要性能开销,导致可能出现性能上的卡顿。
在以往的LayaAirIDE优化方案里,只要开发者将相同颜色的图集资源放在相邻的位置进行排列,引擎就会进行自动合并渲染,进行性能上的优化。优化方式如图1所示。
(图1)
虽然图集资源按颜色排序的方式优化效果比较明显,但是在少数复杂场景的时候,还是有少量不可避免的文本穿插现象出现,为了追求更极致的性能优化。LayaAir 2.0正式版中,IDE内新增了drawCallOptimize优化参数,默认值为false,如图2所示,当drawCallOptimize参数设置为true时,引擎会自动启用文本合并优化,将所有的文本提取到最上层,而开发者无需再刻意调整图集资源和文本的排序,即可实现drawCall自动优化的目标,而且优化的更加干脆彻底。所以本次优化,不仅达到了极致性能优化的目标,还提升了用户的易用性,降低了的优化的操作门槛。
(图2)
需要提醒的是,drawCallOptimize优化方案由于会自动将文本提升显示层级,不适用于必须要将文本半遮挡的特殊需求。当然,绝大多数情况下文本是要处于全文显示的,如果有全隐藏的情况,可以直接设置隐藏属性。所以,建议开发者开启该优化方案。
LayaAir IDE 2.0正式版中还新增了全新的项目发布功能3.0版本。让压缩、版本管理、以及小游戏提取等功能更加完善和灵活,开发者对于每个功能的使用都可以自定义控制,让功能更自由,也大幅提升了产品发布功能的易用性。
由于该功能要介绍的内容较多,所以提前发布了独立文档《LayaAir IDE项目发布3.0详解》,开发者可以阅读本文后,可再点击文档链接,详细阅读项目发布3.0的功能介绍。
2D性能通常看drawCall数量,也就是一个drwaCall是一个批次。而3D性能看drawCall其实就不准确了,因为3D引擎会进行渲染批次的合并处理,看drawCall数量就很难判断性能问题。因此2.0正式版开始,推出一个新的参数RenderBatch(渲染批次)概念,更加专业和准确。如图3所示。以后开发者看到RenderBatch的数值,就是实际渲染的提交批次,数值在满足业务需求的情况下越低越好。
(图3)
在以前,内存的显示是放到一起统计的。其实不太利于内存占用问题的排查,2.0正式版开始,将CPU与GPU的内存统计进行分别显示。可直接查看CPUMemory和GPUMemory的数值即可。如图3所示。
在LayaAir 2.0引擎正式版里,增加了GPU纹理压缩功能,可大幅降低贴图的显存占用,至少达到75%。也就是说,假如原来需要占用100M,那现在只会占有20多M。这将大幅度的减少程序管理内存成本,可以增大美术发挥的空间,让游戏画质变的更加精美了。
并且在Layabox的推动下,从微信7.0版本开始,微信小游戏底层也支持了GPU纹理压缩。开发者们的小游戏画面品质可以更赞了。
在LayaAir 2.0引擎正式版里,还增加了Mesh文件的压缩功能,这将减少Mesh文件尺寸约60%,减少3D模型文件网络下载负担达到一半以上。也就是说同等品质的3D游戏,加载游戏的速度又可以提升了。众所周知,游戏加载速度会对用户的转化数据有着直接的影响,所以开发者们可以尽快用起来这个功能。
在以前的引擎版本里,开发者需要通过一个列表来管理和释放资源,一直是开发者较为头疼的问题,尤其在3D中,由于资源种类较多、又涉及到共享问题,开发者很难安全可靠的通过列表管理释放资源。在LayaAir 2.0引擎正式版里,增加了简单易用的释放无用资源的接口( Laya.Resource.destroyUnusedResources();
),大幅的提升了2D和3D的资源管理易用性。
7、新增专属会员功能
从LayaAir 2.0 正式版开始,在不影响普通开发者的日常开发基础上,我们推出会员专属引擎功能。1024元即可购买成为引擎的年费会员,可享受高端的会员专属功能(例如本次的GPU纹理压缩与Mesh文件压缩即属于会员功能),并且引擎的专属会员功能也会保持一定的频率进行新功能的推出,但价格将保持不变。另外,基于引擎专属功能的会员费收入将会全部用于LayaAir引擎自身的发展,所以这将是LayaAir引擎自立的起点,希望通过开发者的支持,让引擎得已良性发展,并持续下去。
会员资格购买
下载LayaAir 2.0 最新版 unity插件,在插件点开菜单中的Account选项,即可打开如图3所示的面板,再点Recharge按钮可进入充值界面购买会员资格。
除了以上在本次正式版里的重点新增功能外。
增加物理引擎的辅助线设置
物理引擎RigidBody增加getWorldCenter接口,方便获取刚体中心点
物理引擎Physics类增加刚体数量,关节数量,碰撞数量获取接口
物理引擎的碰撞事件增加碰撞点信息获取方法
调整更改物理引擎RigidBody的linearVelocity属性为object类型
引擎Loader增加对sk,ani等文件后缀的自动识别
引擎Scene类open方法增加param参数
引擎Scene类增加单例的支持
增加手Q轻游戏的适配支持
引擎Byte类增加readArrayBuffer方法
引擎增加骨骼动画可能取不到数据的异常处理
引擎增加百度小游戏适配
引擎Scene类增加progress回调,方便获取场景加载进度信息
引擎Scene增加loading页面设置,通过setLoadingPage方法设置加载页面,在场景切换时显示loading页面,loading页面会自动接收当前场景的progress事件
引擎Scene增加showLoadingPage和hideLoadingPage手动控制loading页面显示
引擎Scene的close方法增加type属性,方便知道关闭的原因
引擎Sprite loadImage方法增加url为空的保护
引擎SceneLoader预加载sk文件时自动预加载.png文件
引擎适配库增加微信和百度小游戏输入框的正则使用支持
为适配小游戏,IDE中增加可以把场景等文件导出为json的开关
IDE的graphics属性面板增加rendertype设置
IDE中增加微信开放数据域展示组件
IDE中增加微信小游戏流量共享组件
UI库动态加载皮肤的组件,加载完成后增加resize事件的派发
IDE中新增同类型节点多选,显示本类型更多属性功能
IDE中新增style文件(资源默认属性)变化检测功能,如果发现style发生变化,IDE会自动提示刷新,有效防止出现效果显示不对的问题
IDE中新增九宫格设置界面的输入框tab切换功能
IDE中新增纹理图片转换工具,可大大减少安卓和ios文件内存占用大小(VIP功能)
IDE场景页面右键增加查找引用功能
IDE增加场景导出缓存优化,文件都不变时不导出,提高编译效率
IDE优化监听类文件修改,不修改不再进行编译,提高编译效率
IDE增加区块链项目(ETH、NEO、HPB)
优化完善相关物理类注释,增加详细介绍说明
优化改进音效释放策略,使其更加合理
优化改进drawCirle drawline等矢量接口
优化物理组件,减少对象创建开销
优化改进物理引擎的鼠标关节,设置控制点变为可选,如果不设置,则根据鼠标点击位置作为控制点
CompoundColliderShape增加clearChildShape方法
调整ShinnedMeshRenderer的rootBone关联机制,无rootBone不会关联骨骼节点同步矩阵
Animator增加精灵active属性支持
Rigidbody3D组件增加是否处于睡眠状态属性isSleeping
Rigidbody3D组件增加sleepLinearVelocity和sleepAngularVelocity属性
移除物理组件activate()方法,同时增加Rigidbody3D组件wakeUp()方法
重构TrailSprite3D精灵并修复若干BUG,详见API文大部分
重构PixelLineSprite3D精灵,优化API增强易用性,详见API文档
Vector3增加SetValue方法
TrailRender新增TransformZ模式
相机render函数增加replacementTag参数
1Shader框架增加SubShader概念
增加程序化天空材质
精简自定义Shader配置参数,增强易用性
Animator动画支持倒序播放功能
增加模型文件压缩功能
调整PrimitiveMesh相关子类为Mesh通用类,创建方式改为静态工厂式PrimitiveMesh.createXX()方法,精简网格类。
完善3D模式RotationOverLifeTime模块相关功能
Unity插件增加账户管理页面
Unity插件增加Mesh文件压缩功能
Unity插件增加blinphong材质顶点色
Unity插件调整Unity中LayaShader中输出颜色值得范围
Unity插件修复法线贴图导出BUG
Unity插件优化安卓平台纹理压缩速度
Unity插件优化LayaAirRun功能,移除cmd窗口
Unity插件大幅优化资源导出速度
如果还有开发者对于Laya2.0的新特性不了解的。可以继续看一看新特性的重点内容:
2D方面
1、组件化支持
在LayaAir 1.0内提供了简单的脚本扩展支持,随着用户越来越广,需求越来越复杂,扩展成为常见需求。为了改进这一需求的体验,在LayaAir 2.0内增加了组件化脚本的支持。支持自定义脚本到编辑器,方便扩展已有组件功能。
LayaAir引擎IDE内会提供默认的组件,如果满足不了需求,开发者也可以通过脚本扩展的方式来改进组件功能,从而实现个性化需求。组件化开发在功能抽象,复用及开发效率提升上也有帮助。同时我们保留了页面基类继承的处理方式,在处理UI逻辑时非常方便。
比如想在编辑器内展示脚本定义的属性,可以通过特殊注释来实现
脚本类如下图所示:
上图脚本类在IDE内对应的显示效果如下图所示:
这样就可用在脚本里面设计显示参数,在IDE内输入参数,然后在脚本里面使用,这种标记同时支持AS,JS,TS三种语言,甚至还可用只写标记,脚本本身没有具体实现(在继承属性时会用得到)
Tips:脚本和页面继承相比,如果是页面级的逻辑,需要频繁访问页面内多个元素,使用继承式写法,如果是独立小模块,功能单一复用,建议用脚本方式实现。
2、内置Box2D物理系统与可视化物理编辑
LayaAir1.0采用了轻量级的Matter物理引擎,虽然体积较小,但随着小游戏的开放,越来越多的游戏需要物理引擎的支持,产生出大量的新需求,例如Matter精度不是很高、没有防穿透支持等等,对于物理引擎需求较高的一些小游戏上,Matter物理引擎的压力越来越大。
因此LayaAir引擎组基于市场需求出发重新评估了主流的物理引擎。最终选定并内置了相对最为完善的Box2D物理引擎,封装了物理组件,提供了IDE物理属性的可视化编辑,还让制作物理游戏更加方便快捷。
当然,采用Box2D物理引擎后,引擎体积也会增加一些。如果对于物理引擎功能需求较为简单,并且希望能减小引擎体积的情况下,仍然可以使用Matter物理引擎。
3、增加基于场景管理
LayaAir 2.0提供了基于场景的管理方式,开发者只需要关注场景的创意设计,剩下的场景加载,切换,资源加载,图集使用,资源销毁等等,引擎都提供了完整的方案,原来需要主程做的事情,现在引擎和IDE都提供了,简化了开发成本,让大家把更多时间花在游戏设计上。
4、可定制化编译调试与个性化发布
LayaAir 2.0 采用gulp自动化脚本来构建编译和测试流程,整个编译和调试过程,可通过脚本任务的方式串联,如果想在编译和调试中间插入自定义的新流程,比如copy或者压缩等,只需用gulp文件内增加一个新任务即可,这样就能做到每个项目自定义化,智能化。
同时引擎默认支持了require,这样大量的第三方nodejs库就可以在引擎内直接使用了。
同时改进了微信小游戏调试方式,可以边开发边调试,无需再发布后调试。
5、支持创建LayaCloud项目
LayaCloud可以让前端开发者需学习服务器开发语言,无需了解服务器开发的相关知识,只需要和游戏前端的开发一样,在LayaAirIDE中去创建LayaCloud项目,使用LayaCloud的API,既可以用单机开发的模式去开发一款网络游戏。
LayaCloud的主要系统功能
开发者可以通过配置文件对匹配方式进行定制,从而实现同一款游戏内不同游戏模式的匹配策略多样性。
LayaCloud 提供了完善的房间生命周期管理,开发者可以专注于房间内游戏逻辑的开发,而不必关心房间的创建及回收。
LayaCloud 提供了业内广泛共识的帧同步服务机制,目前业内对战类游戏(如 王者荣耀)大多采用帧同步协议进行通讯。
对于游戏内通讯交互并不频繁的游戏(如 棋牌类游戏),LayaCloud 还提供了基于广播机制的通讯方式,开发者可利用此接口在参与游戏的玩家间进行消息通讯。
LayaCloud 提供了基于JSON格式的玩家数据存取接口,开发者只需要使用和修改数据,无需关心数据什么时候被保存。
更多信息与实例参考请查看LayaCloud官方文档:
https://wiki.cloud.layabox.com/
3D方面
1、性能
众所周知,LayaAir始终以性能著称,本次LayaAir 2.0的3D除了大小功能增加150多项外,还对底层进行了大量重构升级,对静态模型和动态模型均做了大量优化,尤其大幅提升了静态场景性能。同时采用更先进的机制来减少JS和WebGL本地接口的调用次数等等优化措施,对性能做出了大幅提升。比如,3D静态模型批处理性能提升61%,3D动态模型批处理性能提升12%, 3D动画内存减少80%。
2、材质系统
LayaAir2.0对材质进行了诸多改进和提升,并在引擎中提供更多的官方材质以及开放了更多自定义材质相关的功能,新增的主要官方材质包括:PBRStandardMaterial、PBRSpecularMaterial以及UnlitMaterial材质等。
PBR材质也就是近几年比较流行的基于物理渲染材质,采用更科学的shader算法表现更为真实的材质感。
UnlitMaterial是简化版的无光照材质,一般用于技能特效等,通过加色法或者透明混合结合刚体动画可以实现诸多特殊效果。
自定义Shader方面LayaAir 2.0主要增加了多pass功能,比如实现卡通渲染需要的描边效果等,多pass会在shader渲染时渲染多次。
材质开放了renderQueue接口,renderqueue是渲染精灵时的排序依据,开发者可通过指定renderQueue值来修改材质所属精灵的渲染顺序。
3、纹理系统
LayaAir2.0对纹理功能进行了提升和改进,增加了纹理的灵活性和可控性。
比如增加了多种纹理参数配置(mipmap、format、wrapModeU、wrapModeV、filterMode、anisoLevel)
Mipmap为是否生成多级纹理,
format为纹理格式(例如R8G8B8和R8G8B8A8等),
wrapModeU和wrapModeV为纹理寻址模式,
filterMode为纹理过滤器模式,
anisoLevel为各向异性过滤。
还增加了纹理上传像素的接口,开发者可自行上传自定义像素颜色来生成纹理。支持了GPU纹理压缩(Android、IOS),具体为ETC、PVR,可大幅减少显存占用,增加游戏资源总量,提升游戏品质。
4、动画系统
LayaAir2.0 具备更完善的Animator动画系统,可支持更多的动画属性。比如,新增动画多层混合播放、新增Animator动画融合功能crossFade、动画更新机制调整为实时插值、新增多种材质属性动画。
支持动画多层混合播放,可实现动画上下半身分离等功能,尤其是吃鸡类游戏中较为常见,每一层均可独立控制某些骨骼。
在支持动画融合之前,两个非连贯动作的切换会有闪切瞬移的感觉,使用动画融合后,动作的过渡切换会变的平滑自然。动画融合功能不仅支持单层融合,还支持分层动画融合。
Animator动画调整为埃尔米特实时插值,可大幅减少内存并且在相同帧率下提升动画流畅度表现。
5、物理系统
LayaAir1.0物理功能非常匮乏,2.0重点对物理系统进行了重构设计。新增多种物理组件,包括RigidBody、PhysicsCollider、CharacterController,开发者可根据项目需求选择不同的物理组件。
新增刚体:
RigidBody新增碰撞器:
PhysicsCollider新增角色控制器:
CharacterController新增碰撞器形状:
BoxColliderShape、CapsuleColliderShape、CompoundColliderShape、ConeColliderShape、CylinderColliderShape、SphereColliderShape、MeshColliderShape新增辅助检测功能:
shapeCast、shapeCastAll等
6、精灵
LayaAir 2.0中新增了拖尾精灵,用于实现拖尾的拉伸特效。如下图游戏中所示。
三维特效中比较常用的几个精灵分别为粒子、Mesh加刚体动画,还有就是本次LayaAir 2.0中新增的拖尾。同时LayaAir 2.0又新增了像素线精灵用于绘制像素线框,这个一般在游戏或一些开发过程中的调试模式都比较有用。
7、脚本系统
LayaAir2.0新增了onCollisionEnter、onCollisionStay、onCollisionExit、onMouseDown、onMouseDrag、onMouseClick、onMouseUp、onMouseEnter、onMouseOver、onMouseOut碰撞回调函数。
LayaAir2.0对引擎易用性的提升十分注重,脚本中增加了多种回调函数,包括碰撞反馈的回调、三维模型的鼠标拾取更加简单方便。比如,刚提到的各种onCollisonXX为物理碰撞时触发,包括进入碰撞,保持碰撞和退出碰撞。
8、其它
对于资源释放,在LayaAir1.0中一直是开发者比较头疼的事情。在LayaAir2.0中采用destroyUnusedResources()来模拟GC释放当前场景树没有被使用的资源。
LayaAir2.0对光照贴图进行了优化显示,使得光照贴图可以显示大于1.0的HDR颜色,显示效果更加逼真。
LayaNative 2.0 方面
LayaNative2.0对开发者而言,最大的改进就是全面支持LayaAir 3D,为开发者发布3D的App版本提供便利。另外,LayaNative2.0推翻了LayaBox延续5代的Native解决方案,目的是更快、更开放、更简单以及更好的支持3D为设计目标。LayaNative2.0采用WebGL+的专利技术设计理念,更先进、更开放,如同WebGL协议,只定函数不定规则,是一种小巧而且扩展性强的解决方案。
开发者用LayaAir引擎开发的项目,既可以发布到浏览器中,也可以发布成原生的App,下图为LayaNative的结构图以及开发者开发流程图。
LayaNative2.0经过代码重构,性能对比1.0版本有很大的提高。
1、对比LayaNative1.0
2D | 3D | |
---|---|---|
Android | 提高10% | 提高90% |
IOS | 提高13% | 提高270% |
2、对比国内其他通用runtime引擎
2D | 3D | |
---|---|---|
Android | 提高85% | 提高90% |
IOS | 提高240% | 提高270% |
1、LayaNative 2.0支持单线程和双线程两种模式,开发者根据自己项目的实际测试结果,决定选择使用哪种模式。
单线程模式:JS和Render运行在一个线程中。
优点:操作无延迟(例如:touch、按键)。
缺点:性能不如双线程模式。
双线程模式:JS和Render运行在各自的线程中。
优点:性能比单线程版本高。
缺点:操作会有半帧,最大到一帧的延迟(例如:touch、按键)。
2、支持显卡纹理压缩,不仅提高渲染效率还能减少显存的占用。
3、优化的二次开发,更容易理解,方便开发者使用。
Android平台可以真机调试JavaScript
在LayaNative1.0版本中,要调试项目中的JavaScript代码只能调用console.log或者alert函数。在layaNative2.0版本中正式支持使用Chrome浏览器调试JavaScript代码。可以在Chrome的调试器里对代码进行断点的添加,代码追踪等功能。
测试App支持扫码启动项目
为了让开发者能够更快的调试开发,新版本的测试App添加了扫码启动App的功能,免去了调试时需要手工输入URL的麻烦。
LayaNative 2.0的loadingview是采用平台原生语言开发的,Android使用Java语言,IOS使用Objective-C语言。
相较于1.0使用JavaScript语言开发的LoadingView,2.0提供了更加丰富的定制功能。不仅能够更换图片,开发者还可以使用平台语言实现自己想要的功能。
本篇相关文档推荐:
LayaAir项目发布3.0详解(含命令行发布)
9月15日LayaAir 2.0 开始测试,引擎新特性全面介绍
END
近期推荐阅读:
开源,不是一种道德绑架
微信3D小游戏已达数百款,这里肯定有你没玩过的小游戏!
百度即将推出智能小游戏,Layabox率先完成引擎适配支持!
边锋、君海、智明星通、途游、开心网等16家游戏企业急招LayaAir引擎游戏前端程序猿与高级攻城狮!
Layabox为开发者免费获得游戏流量,推出小游戏流量共享平台!
Layabox推出“贡献者支持计划”,扶持开发者生态的贡献者!
超级好玩的空中跑酷3D游戏《极速奔跑少年》点击进入试玩
全民热玩的IO游戏《围地大作战》点击进入试玩