【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

目錄
【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

前言

 

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

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

 

插件介紹

 

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

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

功能特色

  • 高效物件切割: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 能讓切割效果看起來更真實,增強遊戲的動作感和沉浸感。


 

最終效果展示

 

先來看看最終效果的展示。

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

程式碼實現

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); // 將原始物體隱藏

       }

   }

}
 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

 

Unit Mesh Slicing 單位網格切片

 

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

Unit Mesh Slicing 插件下載點

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

 

Unity3D 橫斷面著色器

 

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

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

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

Unity3D Cross Section Shader 插件下載點

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

 

SplitMesh 網格切割

 

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

SplitMesh 插件下載點

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

 

網格拆分

 

這是我在“程式網格拆分”碩士論文中的原始程式碼和演示的簡化版本。 這篇論文是在 2012 年寫的,是使用 unity 開發的,但理論可以應用於任何引擎。

若要切片,請按住空白鍵,然後按下滑鼠左鍵,拖曳切片線,然後放開按鈕。

MeshSplitting 插件下載點

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

 

網格切割機

 

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

Mesh Cutter 插件下載點

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

 

在 Unity3D 中切割蒙皮網格角色

 

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

LimbHacker 插件下載點

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

影片範例:

 

 

MeshSlicingRunTime 網格切片運行時

 

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

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

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

MeshSlicingRunTime 插件下載點
 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!

 

 

切割神器能做什麼?

 

帥,無價!

 

【Unity 插件推薦】用 Ezy-Slice 快速切割 3D 物件,簡單高效的物件切割神器!
帥慘了!!!!還需要解釋嗎??!!

 

 

切割神器插件下載點

 

【Ezy-Slice

GitHub 下載連結:Ezy-Slice 

Google 下載連結:Ezy-Slice Demo 案例。本載點文件僅供學術交流,請勿用於商業用途

 

Unit Mesh Slicing

GitHub 下載連結:Unit Mesh Slicing

 

Unity3D Cross Section Shader

GitHub 下載連結:Unity3D Cross Section Shader

 

Unity3D Cross Section Shader

GitHub 下載連結:SplitMesh

 

MeshSplitting

GitHub 下載連結:MeshSplitting 

 

LimbHacker

GitHub 下載連結:LimbHacker 

 

MeshSlicingRunTime

GitHub 下載連結:MeshSlicingRunTime 

————————————————

以上內容改編節錄 CSDN 作者:向宇it

 

更多好用插件:【Unity 好用插件推薦】持續更新,一起讓遊戲開發事半功倍!

 

 

 

本文原創(或整理)於亞洲電玩通,未經作者與本站同意不得隨意引用、轉載、改編或截錄。

特約作家簡介

X
A
Y
B
JamXu的頭像
JamXu
十年遊戲研發
二十年遊戲台主
三十年遊戲玩家

經中華網龍遊戲企劃進入遊戲圈,然後被雷打到去學程式前後端又學了點設計帶帶幾個研發團隊,見證了 3D 渲染技術及遊戲引擎互相進步,也見證了研發代理的更迭與博弈遊戲的興起,再毅然研究起 SEO 網路行銷社群廣告投放,深信自研自賣才是最大贏家,期望能為台灣研發重回輝煌時光貢獻一點力量。如果你也有遊戲夢,歡迎交流認識。


支持贊助 / DONATE

 

亞洲電玩通只是很小的力量,但仍希望為復甦台灣遊戲研發貢獻一點動能,如果您喜歡亞洲電玩通的文章,或是覺得它們對您有幫助,歡迎給予一些支持鼓勵,不論是按讚追蹤或是贊助,讓亞洲電玩通持續產出,感謝。

亞洲電玩通AsiaGameMaster - Steam 遊戲鑑賞家
亞洲電玩通AsiaGameMaster - FB 粉絲專頁
亞洲電玩通AsiaGameMaster - IG 粉絲專頁
亞洲電玩通AsiaGameMaster - Twitter
亞洲電玩通AsiaGameMaster - Yoytube 粉絲專頁
亞洲電玩通AsiaGameMaster - Tiktok

BTC

亞洲電玩通AsiaGameMaster - BTC 鏈贊助地址

352Bw8r46rfXv6jno8qt9Bc3xx6ptTcPze

 

ETH

亞洲電玩通AsiaGameMaster - ETH 鏈贊助地址

0x795442E321a953363a442C76d39f3fbf9b6bC666

 

TRON

亞洲電玩通AsiaGameMaster - TRON 鏈贊助地址

TCNcVmin18LbnXfdWZsY5pzcFvYe1MoD6f

延伸閱讀