2D破碎效果开源库测评
- 作者:admin
- /
- 时间:2018年11月03日
- /
- 浏览:6558 次
- /
- 分类:博物纳新
导读
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
Unity 2D Destruction 一款超赞的作品