2D破碎效果开源库测评

2D破碎效果开源库测评

导读

Unity 2D Destruction能帮助你快速实现2D元素的破碎效果,它是一个完全开源、精简易用的工具,作者提供了教学视频可以帮助你更快地使用它。

开源库链接:https://lab.uwa4d.com/lab/5b5ca3a6d7f10a201fe8b8f4

效果展示

请输入图片描述

使用步骤

1.首先放置一个2D Sprite在场景中,添加一个Collider,比如Polygon Collider 2D,并去除Collider网格中自动生成的不必要顶点,让它看上去更合理一些(这里建议使用Collider2D Optimization小工具做自动顶点优化)。这里Collider网格的顶点会作为后续破碎效果的分割点。

2.给这个Sprite添加一个Explodable组件,它就是使Sprite可以破碎的关键脚本。
请输入图片描述
3.设置Explodable参数

  • Shatter Type:选择破碎的形状,Triangle或Voronoi。

请输入图片描述

  • Allow Runtime Fragment:开启游戏运行时碎片机制。
  • Extra Points:除Collider网格顶点之外的补充分割点,分割点越多,碎片越小。
  • Subshatter Steps:对子网格进行二次破碎效果。例如,如果将其设置为2,则您的精灵将被分块,然后每个片段将再被分块,然后这些片段将再次分段。一般不建议将其设置为2以上,通常1就足够了。
  • Fragment Layer:设置碎片的Layer。
  • SortingLayer:设置碎片的Sorting Layer。
  • Order In Layer:设置碎片的Order in Layer。

这里需要注意的是第一个选项,由于在运行时实时计算碎片形状会造成比较明显的CPU开销,因此不建议开启,以防造成运行卡顿的现象。

最后三项对于Layer的设置可以帮助你实现以下情景:希望破碎的碎片可以掉落到地面下;希望破碎的碎片不受其他元素(如子弹)影响;

最后还有两个浅显易懂的功能按钮,帮助你更便捷地操作使用它:

  • Generate Fragments:生成碎片。
  • Destroy Fragments:销毁碎片。

4.添加ExplodeOnClick脚本,使Sprite被点击时,触发破碎效果。至此,破碎效果就已经完成了。

扩展功能

作者提供了一个ExplodableAddon抽象类,会在Fragment会生成时自动调用这里的OnFragmentsGenerated方法,开发者可以自行继承这个类,对破碎效果进行功能扩展。

如工程中的Explodable Fragments就是一个使用范例,在Sprite上添加这个脚本,可使碎片发生二次破碎效果。

请输入图片描述

性能测试

UWA惯例,使用UWA GOT Online对这个效果进行一下性能测试。

准备几个测试对比版本:
请输入图片描述
1.版本A:对比版本,不带Explodable组件的石块Spritex5;
2.版本B:预生成版本,添加Explodable组件,预先生成Extra Points=20的Fragments的石块x5;
3.版本C:实时生成版本,添加Explodable组件,实时生成Extra Points=20的Fragments的石块x5;

得到了如下数据:
请输入图片描述
从数据可以看出,使用了Explodable组件的版本帧率是明显有下降的,而使用实时生成碎片方式的版本下降得更明显。接下来再具体看一下这些开销主要来自哪里。

1.逻辑代码对比:

2.渲染模块对比:

3.加载模块对比:

从以上数据可以看出:

1.版本C的自身逻辑中有一项SendMouseEvent耗时明显偏高,这是在点击时实时计算生成大量碎片导致的耗时。
2.版本B和版本C的透明渲染相近,都比版本A高出0.5ms左右,这是由于渲染碎片导致的。
3.版本C的Loading.UpdatePreloading加载耗时则高于另外两个版本,这是由于在实时生成碎片时会调用Resources.UnloadUnusedAssets()方法导致的。

注意事项

1.示例工程使用的是Unity5.3.1f1版本。
2.请注意,由于工具中生成的碎片都是脚本生成的网格物体,不支持保存成Assets,因此无法作为Prefab被保存下来,目前只能通过预先在场景中摆放或实时生成碎片的方式来实现效果。
3.由于测试环境、机型、版本等多项不可控因素,本文的测试数据仅供参考,请开发者自行根据项目及使用情况再做测试。


【博物纳新】是UWA重磅推出的全新栏目,旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。

更多精彩内容请关注:lab.uwa4d.com

  • 人不问 发表在 2018年11月07日 回复

    Unity 2D Destruction 一款超赞的作品