查看原文
其他

LayaAir2.7物理引擎大幅升级并新增cannon物理引擎支持,强化3D光影效果,新增vivo平台引擎共享插件,强化3D插件

Charley Layabox 2023-08-11
今天,LayaAir再次迎来一个大版本的更新,本次2.7.0beta版本的核心在于物理引擎的升级完善,以及考虑到当前有开发者对于物理引擎包体缩减的需求,我们还新增支持了cannon.js物理引擎库。另外,本次更新还进一步增强了3D光影的渲染效果,强化了LayaAir的Unity 3D资源导出插件的功能。关于小游戏平台的加载效率方面,LayaAirIDE中新增了vivo平台的LayaAir引擎共享插件支持。更多本次版本的详细说明,我们在下面的篇幅中,会逐个详细进行介绍。

3D物理功能增强


在LayaAir 3D物理中,本次的2.7版本,增加了固定关节组件Fixed Joint和可配置关节组件Configurable Joint的支持。开发者可以直接将Unity中的Fixed Joint以及Configurable Joint这两个物理关节组件,通过LayaAir的Unity导出插件,一键导出后直接在LayaAir引擎中使用。


Unity的固定关节组件Fixed Joint在LayaAir引擎中为FixedConstraint(固定约束),用于约束一个游戏对象对另一个游戏对象的运动,将两个物体永远以相对的位置固定在一起,即使发生物理改变,它们之间的相对位置也将不变。


Unity的可配置关节组件Configurable Joint在LayaAir引擎中为ConfigurableConstraint(可配置约束),这是一种自定义的约束类型,开发者可根据自身需求来设置六个自由度,此约束可以实现所有的约束类型功能。


我们还提供了断开力breakForce和断开扭矩breakTorque属性,用来设置约束的强度极限,同时在Script3D类中提供了物理的生命周期方法onJointBreak(),当约束力超过强度极限时,会打破约束,并调用该方法。


在易用性方面,本次版本还为刚体提供了约束查询的属性constaintRigidbodyA和constaintRigidbodyB,可方便查询与自己相关的两个约束的刚体名称。

constaintRigidbodyA查询获得的属性值是接入的约束名(与自己连接的刚体名称)。
constaintRigidbodyB查询获得的属性值是接出约束名(自己与其连接的刚体名称)。



LayaAir的Unity导出插件增强


本次的版本对于LayaAir的Unity导出插件也有所增强。更新如下:

  1. 增加导出 Cast Shadow / Receive Shadows 属性,Cast Shadow支持开关(On/ Off)控制。
    light相关灯光设置暂不支持导出,需要在引擎内单独设置。
  2. 增加iOS纹理压缩的等级设置(高质量图片的导出会非常消耗时间),大家可根据需要设置即可。并且重构了纹理压缩的导出流程,输出了导出压缩纹理进度。
  3. 在物理组件方面,新增导出物理FixedJoint组件和物理ConfigurableJoint组件。
  4. 增加导出SkinMeshEnable属性。
  5. 增加Unity导出支持的属性表,内置在插件中,开发者可以在插件中直接找到此版本支持哪些导出属性。

        

支持cannon.js物理引擎


LayaAir内置的物理引擎是Bullet物理引擎,功能强大丰富。是我们推荐的引擎。考虑到有开发者反馈,某些产品只需要用到物理检测,碰撞等很基础的功能,并且希望引擎库的包体尽可能缩小。因此,我们决定在本次的2.7版本中,支持cannon.js物理引擎库,包括以下的cannon物理功能:

(1)cannon物理射线检测

(2)cannon物理碰撞检测

(3)cannon物理box,sphere,compoundCollider的实现

(4)cannon物理trigger的实现

(5)cannon物理形状Scale的实现

(6)cannon物理碰撞事件,触发事件的实现

(7)cannon物理属性(弹力,摩擦力等)的实现

(8)cannonCollider中增加localOffset属性 

自此,开发者如果使用物理功能不多的情况下,可以选择cannon物理引擎方案。满足基础物理引擎功能使用的同时,相对于Bullet引擎大幅减少了包体。因为,使用cannon物理引擎方案,需要引入的cannon与cannonPhysics这两个库压缩后总和也不足200k。

压缩后的laya.cannon.min.js 仅133k压缩后的laya.cannonPhysics.min.js 仅31k
但是,开发者需要注意的是,通过Unity插件导出的物理组件功能,对应的是LayaAir引擎的Bullet引擎,不支持将Unity物理组件功能导出为cannon.js,cannon物理方案仅仅是为对包体有严格要求的开发者提供的一种可选方案。

另外,由于cannon引擎与bullet引擎,本是两个不同的物理引擎,功能API无法做到完全统一,所以不支持项目直接切换物理引擎库,在立项的时候,就需要考虑好,要采用哪个物理引擎库。否则,切换物理引擎需要更改API代码。

3D光影渲染效果增强


在本次的版本中,我们还增加了聚光灯阴影SpotMap渲染管线,开发者不仅可以使用LayaAir引擎中提供的聚光灯实时阴影,还可以自定义实现聚光灯阴影。并且增加了spotShadow的效果宏来控制阴影质量,用以提升渲染效果。


LayaAir-IDE支持vivo平台引擎插件导出


LayaAir引擎插件是小游戏平台为了提升加载效率的一种方案。继微信与QQ小游戏平台之后,vivo小游戏平台也推出了引擎插件能力,让LayaAir引擎的插件也可以在vivo小游戏平台中运行。

采用LayaAirIDE发布vivo小游戏版本的时候,勾选引擎插件相关选项后,IDE发布功能会自动将插件引擎库分离出来。与微信和QQ小游戏平台不同的是,vivo小游戏平台会自动识别引擎插件版本,开发者对于使用插件版本和普通版本的提交流程,除了发布选项那里需要勾选(默认就是勾选的,不想用插件的需要去掉勾选),其它的完全一样。所以对开发者而言,使用vivo平台的LayaAir插件版引擎流程是平滑的,甚至是LayaAir的beta版引擎,也可以成为LayaAir通用引擎插件,这与微信及QQ小游戏平台不同,但,我们并不建议使用beta版进行提交。

另外,需要提醒的是,由于插件版引擎库,不能独立使用,那对于只使用了部分引擎库的开发者,可能还会导致首次加载变慢(这种可能是建立在你的产品引擎版本正好是玩家第一次下载,是种子引擎,而不是受益者)。比如,引擎插件中有6个库,你只用到了核心2D核心库,那3D核心库等其它的,也会同样被下载,不会根据你使用的情况去减少(未来可能会改变为引擎插件包中的库允许分离,具体要看vivo小游戏平台的官方更新通知),这也是与微信与QQ小游戏平台的引擎插件按需使用,有所不同。开发者要注意这里的区别,考虑清楚是否应该要使用引擎插件版本。

对于确定要使用引擎插件的开发者,还有要注意的是,由于vivo小游戏平台是自动识别引擎插件版本的,或许开发者只是在打开LayaAir引擎时不小心加个空格,都可能最终被vivo小游戏平台识别为非公有版LayaAir引擎插件,导致无法享受到公有版引擎的加载优势。所以,不要去修改LayaAir引擎的库,尽可能减少去编辑打开LayaAir引擎库。
更多注意事项与说明,可以前往LayaAir引擎官方文档和vivo的官方文档查看。https://ldc2.layabox.com/doc/?nav=zh-ts-5-4-2https://minigame.vivo.com.cn/documents/#/lesson/open-ability/plugin


写在最后

关于更多2.7版本的引擎功能,可以前往引擎官网https://layabox.com/,查看文档、示例、API。

END



引擎案例介绍:


推荐阅读:

引擎近期版本更新说明:

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存