Unity使用EzySlice實現模型多邊形順序切割
阿新 • • 發佈:2020-07-13
Unity使用EzySlice實現模型切割,供大家參考,具體內容如下
老規矩,直接上程式碼:
注意:指令碼搭載和需要的材質球以及切割陣列填充
EzySlice 多邊形順序切割
using System.Collections; using System.Collections.Generic; using UnityEngine; using EzySlice; public class SplitterModel_ZH : MonoBehaviour { //切割預製體材質 public Material _NewMaterial; //被切割預製體陣列 public List<GameObject> _ListGamPreFab; //呼叫切割模型陣列 序號 private int _ListInt = 0; void Update() { if (Input.GetMouseButtonDown(0)) { StartCoroutine(SlicedModel()); } } public IEnumerator SlicedModel() { if (_ListGamPreFab != null) { //建立忽略切割物件 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) { //銷燬當前被切割物體 Destroy(item.gameObject); //切割出現的物體 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); //銷燬切割形成的上半部分 Destroy(_Lower); //新增網格元件 _Upper.AddComponent<MeshCollider>(); //當前切割物體消失(可擴充套件) _ListGamPreFab[_ListInt].gameObject.SetActive(false); #region 棄用 //for (int i = 0; i < _objs.Length; i++) //{ // _objs[i].AddComponent<Rigidbody>(); // _objs[i].AddComponent<MeshCollider>().convex = true; // //奇 偶 判斷 如果是奇數 // if ((i & 1) != 0) // { // } //} #endregion } } } _ListInt++; //延遲執行 yield return new WaitForSeconds(0.5f); //判斷陣列大小 if (_ListInt == _ListGamPreFab.Count) { //停止協程 StopCoroutine(SlicedModel()); } else { StartCoroutine(SlicedModel()); } } }
補充一點:當前切割陣列可擴充套件,可以使用 LineRender 繪畫實現自定義,只不過我沒時間去寫。
如果有那位大神寫了請幫忙踢我一下,哈哈哈。
連結: Unity LineRender 繪畫
初始狀態:
指令碼搭載情況:
最終效果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。