
前言
本篇文章主要介紹 Unity 遊戲開發中使用 Ezy-Slice 插件實現 3D 物件切割的【使用教學】,並額外提供了一些補充說明。希望能幫助大家更好地理解這個工具的使用方法,提升遊戲開發中的創意和效率,也歡迎大家支持原文作者!

插件介紹
Ezy-Slice 是一款簡單又強大的 Unity 插件,特別適合在遊戲中實現物件切割效果的開發者使用。這款插件由 David Arayan 開發,能夠輕鬆幫你把 3D 模型切割成多個部分,不需要寫很多複雜的代碼,而且還能和 Unity 的物理系統完美結合。無論是水果切切還是製造破壞場景,Ezy-Slice 都能輕鬆搞定!

功能特色
- 高效物件切割:Ezy-Slice 能快速把 3D 模型切割開來,切割演算法非常高效,適合各種遊戲場景。重點是你不需要寫很繁瑣的代碼,就能讓物件完成各種炫酷的切割效果。
- 平滑切割效果:支援平滑的切割,確保被切開的物件表面看起來自然流暢,讓玩家感受到更真實的遊戲體驗。它還支援 UV / Normal / Tangent Space 的插值,使得切割後的表面無縫自然。
- 靈活且文檔化的 API:Ezy-Slice 提供靈活的 API,並且有詳細的文檔,方便開發者自定義切割行為,根據遊戲需求靈活調整。
- 使用面片切割任意 Convex Mesh:Ezy-Slice 支援使用一個面片對任意的 Convex Mesh 進行剖切,讓切割過程更加簡單靈活。
- 與 Unity 無縫集成,無需外部依賴:這個插件完全用 C# 寫成,不需要依賴任何外部插件,讓物件的切割和交互都很順暢,開發起來也更輕鬆。
- MIT 開源協議:Ezy-Slice 使用 MIT 開源協議,開發者可以自由地使用和修改這個插件。
適用場景
- 物件破壞效果:如果你的遊戲需要破壞場景,像是【房屋倒塌】、【石頭碎裂】等,Ezy-Slice 可以創造非常真實的效果,讓玩家感受到破壞的樂趣。
- 食物切割遊戲:這款插件在需要切割食物的遊戲中特別實用,讓玩家體驗【切割食物】的爽快感,互動性更強。
- 角色互動:如果遊戲中角色需要和物件互動,例如用武器切割東西】,Ezy-Slice 能讓切割效果看起來更真實,增強遊戲的動作感和沉浸感。
最終效果展示
先來看看最終效果的展示。

程式碼實現
using EzySlice;
public class splitter : MonoBehaviour
{
public Material cross; // 定義切割面材質
void Update()
{
// 檢測滑鼠的橫向移動,用於控制切割平面的旋轉
float mx = Input.GetAxis("Mouse X");
transform.Rotate(0, 0, -mx * 2);
if (Input.GetMouseButtonDown(0))
{
// 使用立方體射線檢測,偵測切割平面附近的物體
// 把檢測區域的高度設定為非常小的值,相當於只是一個平面檢測
Collider[] colliders = Physics.OverlapBox(transform.position, // 檢測碰撞區域的中心點
new Vector3(4, 0.005f, 4), // 檢測碰撞區域的大小
transform.rotation, // 朝向
~LayerMask.GetMask("Solied")); // ~表示取反,這裡定義不會被切割的層,比如地面切割平面
// 對每一個檢測到的物體進行切割
foreach (Collider c in colliders)
{
Destroy(c.gameObject); // 切割會產生兩個新物體,因此先銷毀原始物體
// 執行切割並獲取切割的結果
SlicedHull hull = c.gameObject.Slice(transform.position, transform.up);
print(hull);
if (hull != null)
{
// 創建切割後的上下兩部分,並設定其材質
GameObject lower = hull.CreateLowerHull(c.gameObject, cross); // 下半部分
GameObject upper = hull.CreateUpperHull(c.gameObject, cross); // 上半部分
GameObject[] objs = new GameObject[] { lower, upper };
foreach (GameObject o in objs)
{
// 添加剛體,讓物體具有物理效果
Rigidbody rb = o.AddComponent<Rigidbody>();
// 因為切割後物體是不規則形狀,所以需要 MeshCollider(網格碰撞器)
// 如果一個 MeshCollider 是剛體,必須將 convex 設為 true
// Unity 的規定:這樣可以形成一個凸多面體,只有凸多面體才能正常作為剛體
o.AddComponent<MeshCollider>().convex = true;
// 在切割的位置添加一個爆炸力,參數解釋:力大小、作用位置、爆炸半徑
rb.AddExplosionForce(100, o.gameObject.transform.position, 20);
}
}
}
}
}
}
切割單物體
using UnityEngine;
using EzySlice;
public class SliceTest : MonoBehaviour
{
public GameObject sourceGo; // 被切割的物體
public GameObject slicerGo; // 切片物體
public Material sectionMat; // 切面材質
private void Update()
{
if (Input.GetKeyDown(KeyCode.A)) // 當按下鍵盤上的 A 鍵
{
SlicedHull hull = sourceGo.Slice(slicerGo.transform.position, slicerGo.transform.up);
GameObject upper = hull.CreateUpperHull(sourceGo, sectionMat); // 創建上半部分
GameObject lower = hull.CreateLowerHull(sourceGo, sectionMat); // 創建下半部分
sourceGo.SetActive(false); // 將原始物體隱藏
}
}
}

Unit Mesh Slicing 單位網格切片
單位網格切片(Unit Mesh Slicing)是指將一個網格物體(例如 3D 模型)進行切割,將其分成多個部分。這種切片技術可以用於創造破碎、剖切等效果,讓物體在場景中更加動態和富有表現力。

Unity3D 橫斷面著色器
橫斷面著色器(Cross-section Shader)是一種可以在 3D 模型上創建橫截面的技術。它就像用一把刀把物體切開一樣,可以展示物體的內部結構或特定位置的切面,讓人更清楚地看到裡面的內容。

這樣的效果在遊戲開發、工程演示、醫學模擬、以及建築展示中都非常實用,它能夠讓我們直觀的了解物體的內部構造。
Unity3D Cross Section Shader 插件下載點

SplitMesh 網格切割
SplitMesh 是一種技術,可以把一個網格(Mesh)切割成多個部分,這在遊戲開發和 3D 圖形處理中非常實用。像是破壞效果、動態調整物體結構或提升性能等場景,都會用到網格切割這種操作。

網格拆分
這是我在“程式網格拆分”碩士論文中的原始程式碼和演示的簡化版本。 這篇論文是在 2012 年寫的,是使用 unity 開發的,但理論可以應用於任何引擎。
若要切片,請按住空白鍵,然後按下滑鼠左鍵,拖曳切片線,然後放開按鈕。

網格切割機
Mesh Cutter 專門用來動態切割網格。它能夠在遊戲運行中高效地切割各種形狀的網格,而且操作非常靈活。這對於一些需要即時破壞效果的場景,比如物體被砍斷或是牆壁被摧毀,特別有幫助。同時也很適合應用在需要即時修改物體形狀的情況,讓場景變得更加生動和互動性更強。

在 Unity3D 中切割蒙皮網格角色
Limb Hacker 是專門為 Unity 開發的一款工具,能夠動態切割有骨骼綁定的網格角色(Skinned Mesh Characters),這在製作例如角色斷肢、部位破壞等效果時非常有用。

影片範例:
MeshSlicingRunTime 網格切片運行時
在運行時以動態方式對網格進行切片。與《潛龍諜影崛起》中實現的內容非常相似。

程式碼被分成多個實現,每個實作都有越來越多的功能,但也更複雜,開銷更高。這樣,根據物件是否相當容易切割,就不需要更複雜的計算。

切割神器能做什麼?
帥,無價!

切割神器插件下載點
【Ezy-Slice】
Google 下載連結:Ezy-Slice Demo 案例。本載點文件僅供學術交流,請勿用於商業用途
【Unit Mesh Slicing】
【Unity3D Cross Section Shader】
GitHub 下載連結:Unity3D Cross Section Shader
【Unity3D Cross Section Shader】
【MeshSplitting】
【LimbHacker】
【MeshSlicingRunTime】
GitHub 下載連結:MeshSlicingRunTime
————————————————
更多好用插件:【Unity 好用插件推薦】持續更新,一起讓遊戲開發事半功倍!
本文原創(或整理)於亞洲電玩通,未經作者與本站同意不得隨意引用、轉載、改編或截錄。
特約作家簡介
支持贊助 / DONATE
亞洲電玩通只是很小的力量,但仍希望為復甦台灣遊戲研發貢獻一點動能,如果您喜歡亞洲電玩通的文章,或是覺得它們對您有幫助,歡迎給予一些支持鼓勵,不論是按讚追蹤或是贊助,讓亞洲電玩通持續產出,感謝。
BTC |
![]() |
352Bw8r46rfXv6jno8qt9Bc3xx6ptTcPze |
|
ETH |
![]() |
0x795442E321a953363a442C76d39f3fbf9b6bC666 |
|
TRON |
![]() |
TCNcVmin18LbnXfdWZsY5pzcFvYe1MoD6f |