【博物納新】是UWA重磅推出的全新欄目,旨在爲開發者推薦新穎、易用、有趣的開源項目,幫助大家在項目研發之餘發現世界上的熱門項目、前沿技術或者令人驚歎的視覺效果,並探索將其應用到自己項目的可行性。很多時候,我們並不知道自己想要什麼,直到某一天我們遇到了它。

更多精彩內容請關注:lab.uwa4d.com

導讀

Unity 2D Destruction能幫助你快速實現2D元素的破碎效果,它是一個完全開源、精簡易用的工具,作者提供了教學視頻可以幫助你更快地使用它。

效果展示

使用步驟

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.由於測試環境、機型、版本等多項不可控因素,本文的測試數據僅供參考,請開發者自行根據項目及使用情況再做測試。

查看原文 >>
相關文章