当前位置: 首页 > 编程笔记 >

Unity使用EzySlice实现模型多边形顺序切割

艾晋
2023-03-14
本文向大家介绍Unity使用EzySlice实现模型多边形顺序切割,包括了Unity使用EzySlice实现模型多边形顺序切割的使用技巧和注意事项,需要的朋友参考一下

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 绘画

初始状态:

脚本搭载情况:

最终效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 我正在寻找一种方法来创建一组多边形(rechtangles),沿着一条线在多个多边形中创建一组多边形(rechtangles),并将其水平隔开,如图所示。 我尝试生成点并将其用作多边形的中点,但问题是,通过创建等间距的点光栅,除了180度之外,不可能以任何其他方向旋转。 例子 给出了一个多多边形形状的对象和由宽度和高度以及每个多边形之间的垂直和水平间距定义的多边形。多边形应仅放置在多多边形内,且不

  • 本文向大家介绍Unity Shader实现裁切效果,包括了Unity Shader实现裁切效果的使用技巧和注意事项,需要的朋友参考一下 Unity Shader学习:裁切效果,供大家参考,具体内容如下 之前看到有人问关于物体裁切方面的问题,初学shader的话可能搞得不是很明白,这里提供下比较简单的思路,有需要的话可以直接使用。(关于切面缝合还没有找到比较好的方法) 裁切原理:将世界空间中像素y值

  • 我希望通过一条线串拆分一个多多边形(代表一个有岛屿的国家),从而将该县一分为二。 此结果是GeometryCollection对象中的一组多边形。如何将结果分组为两个多多边形对象,每个对象都包含各自一半的多边形? 使现代化 问题:确定分裂形状几何的“左”和“右”侧提供了一个很好的解决方案,其中从结果中的每个多边形中提取一个点,看看当与分裂的LineString结合时,它是否形成顺时针或逆时针线串。

  • 概况 背景 Showcase Google Map Solr GitHub https://github.com/phodal/gmap-solr Solr Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索

  • 返回顶点的输入数组,并且附有一些其他方法,如下面所描述 polygon.area() 返回此多边形的标定区域。如果顶点是逆时针顺序,面积为正,否则为负。 polygon.centroid() 返回一个表示此多边形的质心的两元素数组。 polygon.clip(subject) 对这个多边形剪切主题多边形。换句话说,返回一个多边形表示这个多边形和主题多边形的交集。假定剪切的多边形是逆时针方向以及凸多

  • 我的计算机使用Intel显卡运行Ubuntu 16.04。我的OpenGL配置文件使用Mesa 11.2。 我简陋的OpenGL程序在窗口中显示一个简单的正方形。如果我按某个键,我想让程序切换到线框图模式,所以我定义了以下回调函数: 不幸的是,在我的程序运行时按m会导致段错误。不过,奇怪的是,在我的另一台计算机(运行Ubuntu 16.04但使用Nvidia GPU)上,我没有这样的问题,并且程序