Unity使用EzySlice實(shí)現(xiàn)模型多邊形順序切割
Unity使用EzySlice實(shí)現(xiàn)模型切割,供大家參考,具體內(nèi)容如下
老規(guī)矩,直接上代碼:
注意:腳本搭載和需要的材質(zhì)球以及切割數(shù)組填充
EzySlice 多邊形順序切割
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using EzySlice;
public class SplitterModel_ZH : MonoBehaviour
{
//切割預(yù)制體材質(zhì)
public Material _NewMaterial;
//被切割預(yù)制體數(shù)組
public List<GameObject> _ListGamPreFab;
//調(diào)用切割模型數(shù)組 序號(hào)
private int _ListInt = 0;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
StartCoroutine(SlicedModel());
}
}
public IEnumerator SlicedModel()
{
if (_ListGamPreFab != null)
{
//創(chuàng)建忽略切割對(duì)象
Collider[] _Colliders = Physics.OverlapBox(_ListGamPreFab[_ListInt].transform.position, new Vector3(4, 0.00005f, 4), _ListGamPreFab[_ListInt].transform.rotation, ~LayerMask.GetMask("Solid"));
foreach (var item in _Colliders)
{
//銷(xiāo)毀當(dāng)前被切割物體
Destroy(item.gameObject);
//切割出現(xiàn)的物體
SlicedHull _SlicedHull = item.gameObject.Slice(_ListGamPreFab[_ListInt].transform.position, _ListGamPreFab[_ListInt].transform.up);
if (_SlicedHull != null)
{
//切割下半部分部分 物體
GameObject _Lower = _SlicedHull.CreateLowerHull(item.gameObject, _NewMaterial);
//切割上半部分部分 物體
GameObject _Upper = _SlicedHull.CreateUpperHull(item.gameObject, _NewMaterial);
//銷(xiāo)毀切割形成的上半部分
Destroy(_Lower);
//添加網(wǎng)格組件
_Upper.AddComponent<MeshCollider>();
//當(dāng)前切割物體消失(可擴(kuò)展)
_ListGamPreFab[_ListInt].gameObject.SetActive(false);
#region 棄用
//for (int i = 0; i < _objs.Length; i++)
//{
// _objs[i].AddComponent<Rigidbody>();
// _objs[i].AddComponent<MeshCollider>().convex = true;
// //奇 偶 判斷 如果是奇數(shù)
// if ((i & 1) != 0)
// {
// }
//}
#endregion
}
}
}
_ListInt++;
//延遲執(zhí)行
yield return new WaitForSeconds(0.5f);
//判斷數(shù)組大小
if (_ListInt == _ListGamPreFab.Count)
{
//停止協(xié)程
StopCoroutine(SlicedModel());
}
else
{
StartCoroutine(SlicedModel());
}
}
}
補(bǔ)充一點(diǎn):當(dāng)前切割數(shù)組可擴(kuò)展,可以使用 LineRender 繪畫(huà)實(shí)現(xiàn)自定義,只不過(guò)我沒(méi)時(shí)間去寫(xiě)。
如果有那位大神寫(xiě)了請(qǐng)幫忙踢我一下,哈哈哈。
初始狀態(tài):

腳本搭載情況:

最終效果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
DevExpress實(shí)現(xiàn)GridControl單元格編輯驗(yàn)證的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridControl單元格編輯驗(yàn)證的方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
WinForm中comboBox控件數(shù)據(jù)綁定實(shí)現(xiàn)方法
這篇文章主要介紹了WinForm中comboBox控件數(shù)據(jù)綁定實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了WinForm實(shí)現(xiàn)comboBox控件數(shù)據(jù)綁定的常用方法與相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
C#學(xué)習(xí)教程之Socket的簡(jiǎn)單使用
這篇文章主要給大家介紹了關(guān)于C#學(xué)習(xí)教程之Socket的簡(jiǎn)單使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
基于C#設(shè)計(jì)一個(gè)雙色球選號(hào)工具
這篇文章主要為大家詳細(xì)介紹了如何利用C#設(shè)計(jì)實(shí)現(xiàn)一個(gè)雙色球選號(hào)工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
C# datatable 不能通過(guò)已刪除的行訪問(wèn)該行的信息處理方法
采用datatable.Rows[i].Delete()刪除行后再訪問(wèn)該表時(shí)出現(xiàn)出現(xiàn)“不能通過(guò)已刪除的行訪問(wèn)該行的信息”的錯(cuò)誤2012-11-11
C#基于ScottPlot實(shí)現(xiàn)可視化的示例代碼
這篇文章主要為大家詳細(xì)介紹了C#如何基于ScottPlot實(shí)現(xiàn)可視化效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
CefSharp過(guò)濾圖片RequestHandler問(wèn)題
這篇文章主要介紹了CefSharp過(guò)濾圖片RequestHandler問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01

