LayaBox 自 2014 年 6 月 30 号推出 LayaAir 引擎以来,以极致的性能优势和成熟的 3D 引擎两大核心优势, 以及支持 JS、TS、AS3 三种开发语言和引擎 API 简洁易上手等优势,获得广大开发者的喜爱,当前 LayaAir 引 擎开发者总量已超过 50 万,3D HTML5 和 3D 小游戏市场占有率超过 93%。
2018 年 9 月 15 日,Layabox 再次发布 LayaAir 2.0 引擎测试版。2.0 引擎在保持 1.0 极致性能的基础上, 更为重视开发者的易用性体验。因此 2.0 的 IDE 进行了大量的易用性改进与优化。而 3D 方面,则完全重构了 3D 引擎,不仅再次提升了性能与易用性,还新增了 150 多项功能。
2019 年 1 月 19 日,历时 4 个多月,在引擎组团队的不懈努力下,终于为开发者带来了 2.0 的稳定正式版。 在这 4 个多月的测试期间,根据开发者的反馈,陆续推出了 4 个 2.0 beta 版本,其中修复 BUG 若干,2D 引擎 与 IDE 优化与新增功能 37 项,3D 引擎与插件优化与新增功能 26 项。在此,也感谢大量参与测试和反馈 BUG 的开发者。
首先,先为大家介绍一下 Laya2.0 从测试版到正式版的几个最核心的更新:
1、增加 2D 引擎的 drawCall 优化的功能(drawCallOptimize)
2D 引擎中,DrawCall 数量多必然会引起性能下降。LayaAir 引擎在图片的渲染方面做了很多优化,比如相 邻的相同图集在渲染的时候,会自动合并起来一起渲染,这样就可以减少 DrawCall 的数量。然而,如果 UI 使用 时将不同图集或文本穿插必然会打断图集的合并渲染。造成因开发者使用不当而产生的不必要性能开销,导致可 能出现性能上的卡顿。
在以往的 LayaAirIDE 优化方案里,只要开发者将相同颜色的图集资源放在相邻的位置进行排列,引擎就会 进行自动合并渲染,进行性能上的优化。优化方式如图 1 所示。
图1
虽然图集资源按颜色排序的方式优化效果比较明显,但是在少数复杂场景的时候,还是有少量不可避免的 文本穿插现象出现,为了追求更极致的性能优化。LayaAir 2.0 正式版中,IDE 内新增了 drawCallOptimize 优化 参数,默认值为 false,如图 2 所示,当 drawCallOptimize 参数设置为 true 时,引擎会自动启用文本合并优化, 将所有的文本提取到最上层,而开发者无需再刻意调整图集资源和文本的排序,即可实现 drawCall 自动优化的 目标,而且优化的更加干脆彻底。所以本次优化,不仅达到了极致性能优化的目标,还提升了用户的易用性,降 低了的优化的操作门槛。
图2
需要提醒的是,drawCallOptimize 优化方案由于会自动将文本提升显示层级,不适用于必须 要将文本半遮挡的特殊需求。当然,绝大多数情况下文本是要处于全文显示的,如果有全隐 藏的情况,可以直接设置隐藏属性。所以,建议开发者开启该优化方案。
2、增加全新的项目发布功能(项目发布 3.0 版)
LayaAir IDE 的项目发布是开发者常用的功能,集成了项目混淆与压缩以及版本管理等产品发布功能。尤其 是在微信、百度等小游戏平台推出以来,IDE 中的项目发布也成为了适配各个小游戏平台的必备功能。
在 2.0 正式版中 LayaAir IDE 还新增了全新的项目发布功能 3.0 版本。让压缩、版本管理、以及小游戏提 取等功能更加完善和灵活,开发者对于每个功能的使用都可以自定义控制,让功能更自由,也大幅提升了产品发 布功能的易用性。
3、性能统计面板的优化
新增渲染批次统计参数 RenderBatch
2D 性能通常看 drawCall 数量,也就是一个 drwaCall 是一个批次。而 3D 性能看 drawCall 其实就不准确 了,因为 3D 引擎会进行渲染批次的合并处理,看 drawCall 数量就很难判断性能问题。因此 2.0 正式版开始,推出一个新的参数 RenderBatch(渲染批次)概念,更加专业和准确。如图 3 所示。以后开发者看到 RenderBatch 的数值,就是实际渲染的提交批次,数值在满足业务需求的情况下越低越好。
图3
分离 CPU 与 GPU 内存统计显示
在以前,内存的显示是放到一起统计的。其实不太利于内存占用问题的排查,2.0 正式版开始,将 CPU 与 GPU 的内存统计进行分别显示。可直接查看 CPUMemory 和 GPUMemory 的数值即可。如图 3 所示。
4、增加 GPU 纹理压缩
在 LayaAir 2.0 引擎正式版里,增加了 GPU 纹理压缩功能,可大幅降低贴图的显存占用,至少达到 75%。也就是说,假如原来需要占用 100M,那现在只会占有 20 多 M。这将大幅度的减少程序管理内存 成本,可以增大美术发挥的空间,让游戏画质变的更加精美了。
并且在 Layabox 的推动下,从微信 7.0 版本开始,微信小游戏底层也支持了 GPU 纹理压缩。开发者 们的小游戏画面品质可以更赞了。
5、增加 Mesh 文件压缩
在 LayaAir 2.0 引擎正式版里,还增加了 Mesh 文件的压缩功能,这将减少 Mesh 文件尺寸约 60%, 减少 3D 模型文件网络下载负担达到一半以上。也就是说同等品质的 3D 游戏,加载游戏的速度又可以提
升了。众所周知,游戏加载速度会对用户的转化数据有着直接的影响,所以开发者们可以尽快用起来这个 功能。
6、增加释放无用资源的接口 destroyUnusedResources
在以前的引擎版本里,开发者需要通过一个列表来管理和释放资源,一直是开发者较为头疼的问题, 尤其在 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(充值)按钮可进入充值界面购买会员资格。
以下为 LayaAir 2.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 官方文档: 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 材质等。
3、纹理系统
LayaAir2.0 对纹理功能进行了提升和改进,增加了纹理的灵活性和可控性。
比如增加了多种纹理参数配置(mipmap、 format、wrapModeU、wrapModeV、 filterMode、anisoLevel)
还增加了纹理上传像素的接口,开发者可自行上传自定义像素颜色来生成纹理。支持了 GPU 纹理压缩 (Android、IOS),具体为 ETC、PVR,可大幅减少显存占用,增加游戏资源总量,提升游戏品质。
4、动画系统
LayaAir2.0 具备更完善的 Animator 动画系统,可支持更多的动画属性。比如,新增动画多层混合播放、新 增 Animator 动画融合功能 crossFade、动画更新机制调整为实时插值、新增多种材质属性动画。
支持动画多层混合播放,可实现动画上下半身分离等功能,尤其是吃鸡类游戏中较为常见,每一层均可独 立控制某些骨骼。
在支持动画融合之前,两个非连贯动作的切换会有闪切瞬移的感觉,使用动画融合后,动作的过渡切换会 变的平滑自然。动画融合功能不仅支持单层融合,还支持分层动画融合。
Animator 动画调整为埃尔米特实时插值,可大幅减少内存并且在相同帧率下提升动画流畅度表现。
5、物理系统
LayaAir1.0 物理功能非常匮乏, 2.0 重点对物理系统进行了重构设计。新增多种物理组件,包括 RigidBody、 PhysicsCollider、CharacterController,开发者可根据项目需求选择不同的物理组件。
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 方面LayaNative2.0 对开发者而言,最大的改进就是全面支持 LayaAir 3D,为开发者发布 3D 的 App 版本提供 便利。另外,LayaNative2.0 推翻了 LayaBox 延续 5 代的 Native 解决方案,目的是更快、更开放、更简 单以及更好的支持 3D 为设计目标。LayaNative2.0 采用 WebGL 的专利技术设计理念,更先进、更开放, 如同 WebGL 协议,只定函数不定规则,是一种小巧而且扩展性强的解决方案。
1、LayaNative 架构
开发者用 LayaAir 引擎开发的项目,既可以发布到浏览器中,也可以发布成原生的 App。
2、性能
LayaNative2.0 经过代码重构,性能对比 1.0 版本有很大的提高。
3、扩展功能
1)LayaNative 2.0 支持单线程和双线程两种模式,开发者根据自己项目的实际测试结果,决定选择使用 哪种模式。
单线程模式:JS 和 Render 运行在一个线程中。 优点:操作无延迟(例如:touch、按键)。 缺点:性能不如双线程模式。
双线程模式:JS 和 Render 运行在各自的线程中。 优点:性能比单线程版本高。 缺点:操作会有半帧,最大到一帧的延迟(例如:touch、按键)。
2)支持显卡纹理压缩,不仅提高渲染效率还能减少显存的占用。
3)优化的二次开发,更容易理解,方便开发者使用。
4、易用性
1)提供更方便的调试功能
Android 平台可以真机调试
JavaScript 在 LayaNative1.0 版本中,要调试项目中的 JavaScript 代码只能调用 console.log 或者 alert 函数。在 layaNative2.0 版本中正式支持使用 Chrome 浏览器调试 JavaScript 代码。可以在 Chrome 的调试器里对 代码进行断点的添加,代码追踪等功能。
测试 App 支持扫码启动项目
为了让开发者能够更快的调试开发,新版本的测试 App 添加了扫码启动 App 的功能,免去了调试时需要 手工输入 URL 的麻烦。
2)可以定制内容更加丰富的启动界面
LayaNative 2.0 的 loadingview 是采用平台原生语言开发的,Android 使用 Java 语言,IOS 使用 Objective-C 语言。
相较于 1.0 使用 JavaScript 语言开发的 LoadingView,2.0 提供了更加丰富的定制功能。不仅能够更换图 片,开发者还可以使用平台语言实现自己想要的功能。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved