前言
本篇文章主要介紹 Unity 遊戲開發中使用 OpenFracture 插件實現物件破壞與切割的【使用教學】,並額外提供了一些補充說明。希望能幫助大家更好地理解這個工具的使用方法,提升遊戲開發中的創意和效率,也歡迎大家支持原文作者!
插件介紹
OpenFracture 是一款專為 Unity 開發的插件,用於在遊戲開發中創建物理破碎效果。這款插件能夠讓物件在受到外力,如【撞擊】或【爆炸】時產生真實的【碎裂】效果,從而增強遊戲中的物理互動性和視覺效果。
功能特色
- 動態破碎:OpenFracture 支持動態地將物件拆分成碎片。當玩家在遊戲中對物件施加某種外力時,例如【打擊】或【撞擊】插件會根據物件的材質、形狀和外力大小來模擬真實的物理破碎過程。
- 多種破碎模式:該插件提供了多種破碎模式,包括【隨機碎裂】、【沿著特定方向碎裂】或【平面碎裂】等。這讓開發者能夠根據遊戲需求自定義物件的破碎效果,達到更精細的控制。
- 高性能優化:OpenFracture 對性能進行了優化,能夠在不影響遊戲幀率的情況下處理大量的碎片,尤其適合需要大範圍破壞效果的場景,比如【爆炸】或【建築倒塌】。
- 簡易使用介面:OpenFracture 具有直觀的 Unity 編輯器介面,開發者只需將插件應用於目標物件,並設置相關參數,即可快速生成所需的破碎效果。
- 支持物理交互:插件生成的碎片完全支持 Unity 的物理系統,因此這些碎片可以與場景中的其他物件產生交互,例如【碰撞】和【重力作用】,進一步增強遊戲的沉浸感。
適用場景
- 射擊遊戲:物體被槍擊時的碎裂效果。
- 動作冒險遊戲:牆壁或建築在爆炸或角色撞擊後的破壞。
- 恐怖遊戲:用來增加驚悚氣氛的動態破壞效果,例如窗戶突然破碎。
使用注意事項
1.如果要導入自定義網格,必須在導入設置中將“啟用讀取/寫入”設為 true,否則會產生錯誤。
2.網格必須是非相交和封閉的,否則重新三角測量將會失敗。
上面描繪的是凳子的線框模型。注意橫桿如何與凳子腿相交。相交的幾何圖形將導致三角測量算法(填充新切割的面)失敗,並導致如下所示的偽影。我實現的三角測量算法不處理自相交多邊形。檢測自相交幾何是一個不平凡的問題,作者並不打算添加此功能。
3. 壓裂過程是一個計算密集型的過程。簡單的模型(幾百個頂點)可以毫不費力地分成幾十個部分。然而在運行時對包含數千個頂點的複雜模型進行壓裂的性能,可能在較舊的、功能較差的計算機上會非常慢。
以下是優化性能的一些提示:
- 減少片段數量 。
- 禁用或減少折射間隔次數 。
- 在編輯器中使用預斷裂模型,而不是運行時的破裂。
- 將您的模型引入 Blender 等 3D 建模程序,並使用抽取工具簡化網格幾何體 。
Fracture
斷裂,在運行時將網格分解成多個部分。
1. 前提條件
對象應添加以下組件。前三個是腳本的必需組件(即它們會自動添加),而碰撞體則不是必需的組件,因為您可以使用任何類型的碰撞體。
- MeshFilter
- MeshRenderer
- RigidBody
- Collider(任何類型)
2. 給想要破壞的物體添加 Fracture 腳本。
3. 參數說明
Trigger Options(觸發選項)
- Trigger Type(觸發類型)
- Collision(碰撞):基於物理碰撞的觸發
- Minimum Collision Force(最小碰撞力觸發斷裂所需的最小碰撞力):如果碰撞力等於或大於此值,則將觸發斷裂。要忽略此設置,請將最小力設置為 0。
- Limit collisions to selected tags(將衝突限制為選定標籤):通過啟用此選項,您可以限制哪些對象標籤將觸發衝突。檢測到衝突時,碰撞對象的標記將與包含的標記列表進行比較。如果它包含在該列表中(並且滿足其他衝突條件),則將觸發斷開。
Included Tags(包含的標籤):可以觸發斷開的遊戲對象標籤集。
- Collision(碰撞):基於物理碰撞的觸發
- Trigger(觸發器):基於觸發器的觸發
- Filter Collisions By Tag(按標籤過濾碰撞):如果為 true,則只使用帶有“Allowed tags”標籤的對象列表將觸發衝突。
Trigger Allowed Tags(觸發允許的標籤):如果“Filter Collisions By Tag”設置為 true,只有帶有此列表中標記的對象將觸發骨折。
- Keyboard(鍵盤):用戶按下某個鍵觸發
- Trigger Key(觸發鍵):按下時觸發斷裂的鍵。
Fracture Options(斷裂選項)
- Fragment Count(片段計數):要將對象分解為的片段數。注意:如果“檢測浮動片段”設置為 true,則最終的片段數可能高於“片段計數”。這是因為浮動碎片檢測是在壓裂階段完成後進行的。
- Asynchronous(異步):如果啟用,網格將通過使用協程異步斷開。斷裂步驟分布在許多框架上,而不是一個框架上,以防止卡頓。如果碎片計數很大,則觸發裂縫和實際發生壓裂之間的延遲可能很大。如果性能是問題,建議在編輯器而不是運行時中斷開網格。
- Detect Floating agments(檢測浮動片段):如果啟用,將在執行斷裂算法後對生成的片段進行傳遞,以確定是否有任何片段包含未連接的幾何圖形。在壓裂非凸網格時,可能會發生這種情況。由於必須搜索每個片段的幾何形狀以識別這些不相連的頂點/面集,因此此選項將顯著降低壓裂的性能。同樣的如果性能問題,建議您使用該腳本。
- Fracture Along X/Y/Z Plane(沿 X/Y/Z 平面的斷裂):每條斷裂線都可以由一個向量指定。對於某些對象,最好將此向量鎖定到特定平面。例如,假設您有一個玻璃窗格模型,其寬度沿 X 軸,高度沿 Y 軸,厚度沿 Z 軸。斷裂線應約束在玻璃的表面(X-Y 平面),而不是沿其厚度分割玻璃。在這種情況下,您可以將“沿 X 平面的斷裂”和“沿 Y 平面的斷裂”設置為 true,將“沿 Z 平面的斷裂”設置為 false。
- Inside Material(內部材料):用於新斷裂面的材料。
- Texture Scale(紋理比例):應用於斷裂面的 UV 坐標的比例因子。
- Texture Offset(紋理偏移):應用於斷裂面的 UV 坐標的常量偏移。
Refracture Options(重裂選項)
- Enabled(已啟用):設置為 true 以啟用片段折射。
- Invoke Callbacks(調用回調):如果啟用,折射片段也會觸發回調。如果只想在對象首次斷開時觸發操作,而不要在片段重新斷開時觸發操作(在這種情況下,應將此選項設置為 false),則此選項非常有用。
- Max # of Refractures(最大 # 個重新斷開):一個片段可以重新斷開的最大次數。警告:折射會導致碎片呈指數增長。如果啟用折射,建議保持較低的片段計數。
Callback Options(回調選項)
- OnComplete():當破裂完成時,將觸發此回調。使用它來播放聲音、打開燈或執行其他任何遊戲內邏輯。
Prefracture
預斷裂:用於編輯器中的預斷裂網格。生成的片段可以直接保存在場景中,也可以保存到磁碟(如果要創建預製件)。
該腳本允許在編輯器中斷開網格。預斷開網格時,片段將添加到場景中,並將原始對象設置為非活動狀態。每個碎片都有一個被冻结的剛體。片段可以根據幾種觸發條件(如下所列)解凍。當滿足觸發條件時,片段將解凍。如果滿足單個片段的觸發條件,也可以解凍所有片段。這允許預斷裂的網格一次分解一塊或一次全部破碎。
1.先決條件
與 Fracture 一樣。
2.給想要破壞的物體添加 Prefracture 腳本。
3. 參數說明
其他參數與前面的 Fracture 一樣。
Prefracture Options(預斷裂選項)
- Unfreeze All(全部解凍):如果觸發了某個片段,則解凍所有片段。
- Sae Fragments to Disk(將片段保存到磁碟):將片段網格保存到磁碟。如果預製件中將使用預斷開網格,則為必需。如果預斷開網格不會用作預製件並將嵌入到場景中,則可以選。
- Save Location(保存位置):將片段保存到相對於項目根目錄的位置。
- Prefracture Mesh(預斷裂):此按鈕將斷開網格並生成碎片。生成片段後,包含基礎網格體的對象將設置為非活動狀態,但仍保留在場景中。
Slice
切片:網格的運行時切片。
該腳本允許在運行時將網格切成兩部分,如果需要片段還可以重新切片為更小的片段。
1.前提條件
與 Fracture 一樣。
2.給想要破壞的物體添加 Slice 腳本。
3.參數說明
Slice Options(切片選項)
- Enable Reslicing(啟用重新切片):設置為 true 以啟用片段重新切片。
- Max Reslice Count(最大重新切片計數):片段可以重新切片的最大次數。
- Detect Floating Fragments(檢測浮動片段):如果啟用,將在切片算法執行後對生成的片段進行傳遞,以確定是否有任何片段包含未連接的幾何圖形。切片非凸網格時可能會發生這種情況。由於必須搜索每個片段的幾何形狀以識別這些斷開連接的頂點/面集,因此此選項將顯著降低切片的性能。
- Inside Material(內部材質):用於新切片面的材質。
- Texture Scale(紋理比例):應用於切片面的 UV 坐標的比例因子。
- Texture Offset(紋理偏移):應用於切片面的 UV 坐標的常量偏移。
- Invoke Callbacks(調用回調):如果啟用此選項,切片片段也會觸發回調函數。如果只想在第一次切片對象時觸發操作,而不要在重新切片片段時觸發操作(在這種情況下,將此選項設置為 false),則此選項非常有用。
Callback Options(回調選項)
- OnCompleted():當切片完成時觸發此回調。使用它來播放聲音、打開燈或執行其他任何遊戲內邏輯。
4. 刀片腳本
與 Fracture 和 Prefracture 不同,Slice 需要編寫腳本,因為您必須在運行時傳入切片平面的法線和原點。如果要切片的對象,請執行以下代碼將其切片為兩個片段。sliceNormal 和 sliceOrigin 分別是切片平面在世界坐標中的法線和原點:
public GameObject obj; // 切割物體
var slicer = obj.GetComponent<Slice>(); //
var sliceNormal = Vector3.up; //
var sliceOrigin = obj.transform.position; //
slicer.ComputeSlice(sliceNormal, sliceOrigin); //
OpenFracture 影片介紹
破壞神器插件下載點
【OpenFracture】
————————————————
更多好用插件:【Unity 好用插件推薦】持續更新,一起讓遊戲開發事半功倍!
本文原創(或整理)於亞洲電玩通,未經作者與本站同意不得隨意引用、轉載、改編或截錄。
特約作家簡介
支持贊助 / DONATE
亞洲電玩通只是很小的力量,但仍希望為復甦台灣遊戲研發貢獻一點動能,如果您喜歡亞洲電玩通的文章,或是覺得它們對您有幫助,歡迎給予一些支持鼓勵,不論是按讚追蹤或是贊助,讓亞洲電玩通持續產出,感謝。
BTC |
352Bw8r46rfXv6jno8qt9Bc3xx6ptTcPze |
ETH |
0x795442E321a953363a442C76d39f3fbf9b6bC666 |
TRON |
TCNcVmin18LbnXfdWZsY5pzcFvYe1MoD6f |