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

初始状态:

脚本搭载情况:

最终效果:

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

(0)

相关推荐

  • Unity切割图集转换为多张图片

    本文实例为大家分享了Unity切割图集转换为多张图片的具体代码,供大家参考,具体内容如下 这是网上看来的一个工具,用于Unity中将图集切割为多张的格式后将这些sprite改为一张张图片,就是切割速度太慢,图集中的图片较多的时候还会丢失一部分图片,有时间本人会进一步改善再修改这篇博客. 1.首先选中要切割的图集,texture type 选为default,并勾选Advanced下的read/Write Enabled. 2.texture type改为sprite(2D and UI),Spr

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

    Unity使用EzySlice实现模型切割,供大家参考,具体内容如下 老规矩,直接上代码: 注意:脚本搭载和需要的材质球以及切割数组填充 EzySlice 多边形顺序切割 using System.Collections; using System.Collections.Generic; using UnityEngine; using EzySlice; public class SplitterModel_ZH : MonoBehaviour { //切割预制体材质 public Mate

  • 浅谈Unity脚本生命周期与执行顺序

    一.脚本生命周期 Unity脚本中的常见必然事件如下表所示 名称 触发时机 用途 Awake 脚本实例被创建时调用 用于游戏对象的初始化,注意Awake的执行早于所有脚本的Start函数 OnEnable 当对象变为可用或激活状态时被调用 用途 Start Update函数第一次运行之前调用 用于游戏对象的初始化 Update 每帧调用一次 用于更新游戏场景和状态 FixedUpdate 每个固定物理时间间隔调用一次 用于物理状态的更新 LateUpdate 每帧调用一次(在update之后调用

  • Unity UI拖拽模型选择功能

    指定一块区域,玩家鼠标or手指拖拽这个区域,模型会进行偏移,并用于进行人物.道具的选择 给模型定义一些属性 using System.Collections; using System.Collections.Generic; using UnityEngine; public class UIModelUtil : MonoBehaviour { public Animator animator; public int id; public int index; } 模型控制 using Sy

  • Django Admin设置应用程序及模型顺序方法详解

    Django默认情况下,按字母顺序对模型进行排序.因此,Event应用模型的顺序为Epic.EventHero.EventVillain.Event 假设你希望顺序是 EventHero.EventVillain.Epic.Event. 用于呈现后台indxe页面的模板为admin/index.html,对应的视图函数为 ModelAdmin.index. def index(self, request, extra_context=None): """ Display th

  • Unity 修改FBX模型动画的操作

    如何在Unity里修改FBX模型自带的动画 我们在把模型做成预制体的时候会出现,模型当前看到的位置和动画播放的位置不一致,而且模型动画文件又是只能读不能改 就这种情况 修改办法 选择模型的动画文件按Ctrl+D复制一份出来再修改就行了,然后在重新引用复制出来的新动画文件 补充:unity中对导入的FBX动画进行重新编辑 在unity中,当我们打开一个fbx自带的动画的时候,会发现动画的关键帧视灰色的,在动画的名字后面有(read-only)的字样,我们没有办法对fbx的动画进行重新编辑,在某些情

  • 并发编程之Java内存模型顺序一致性

    目录 1.数据竞争和顺序一致性 1.1 Java内存模型规范对数据竞争的定义 1.2 JMM对多线程程序的内存一致性做的保证 2.顺序一致性内存模型 2.1 特性 2.2 举例说明顺序一致性模型 2.3 同步程序的顺序一致性效果 2.4 未同步程序的执行特性 3. 64位long型和double型变量写原子性 3.1 CPU.内存和总线简述 3.2 long和double类型的操作 简介: 顺序一致性内存模型是一个理论参考模型,处理器的内存模型和编程语言的内存模型都会以顺序一致性内存模型作为参照

  • Unity实现简单换装系统

    关于Unity的换装,网上有几篇文章,我之前也简单的描述过实现.不过那个时候只是粗略的试验了下.今天好好梳理了下代码. 先上代码(自己的游戏项目,不是公司的,所以放心的贴上项目代码了,部分引用到其他的功能文件,但是核心代码无影响,这里主要看一下细节和思路) using UnityEngine; using System.Collections; using System.Collections.Generic; public enum AvatarPart { helmet, chest, sh

  • Unity通过BlendShape实现面部表情过渡切换Animation教程

    目录 一.前言 二.BlendShape(动画师.MAYA) 三.Unity控制BlendShapes 1.SkinnedMeshRenderer控制BlendShape 2.Animation控制BlendShape 四.结束语 一.前言 点关注不迷路,持续输出Unity干货文章. 嗨,大家好,我是新发. 在Unity项目中,我们可能需要实现3D角色表情的过渡切换,比如像这样子: 在Unity中如何做这个功能呢?今天就来跟大家讲一下. 二.BlendShape(动画师.MAYA) 在Maya中

  • Java并发编程之内存模型

    目录 一.Java内存模型的基础 1.1 并发编程模型的两个关键问题 1.2 Java内存模型的抽象结构 1.3 从源代码到指令重排序 1.4 写缓冲区和内存屏障 1.4.1 写缓冲区 1.4.2 内存屏障 1.5 happens-before 简介 简介: Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,这一系列几篇文章将揭开Java内存模型的神秘面纱. 这一系列的文章大致分4个部分,分别是: Java内存模型基础,主要介绍内存模型相关基本概念 Java内存模型

  • 并发编程之Java内存模型

    目录 一.Java内存模型的基础 1.1 并发编程模型的两个关键问题 1.2 Java内存模型的抽象结构 1.3 从源代码到指令重排序 1.4 写缓冲区和内存屏障 1.4.1 写缓冲区 1.4.2 内存屏障 1.5 happens-before 简介 简介: Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,这一系列几篇文章将揭开Java内存模型的神秘面纱. 这一系列的文章大致分4个部分,分别是: Java内存模型基础,主要介绍内存模型相关基本概念 Java内存模型

随机推荐