Unity CSG 布尔运算插件 模型打孔 模型打洞 模型挖洞

下载CSG并导入到项目中:https://download.csdn.net/download/cuijiahao/12922328

1、将DLL文件剪切到Assets目录下的Plugins文件夹中,注意是剪切,DLL文件夹必须清空。

 2、代码展示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MeshMakerNamespace;
using UnityEngine.UI;

public class Game : MonoBehaviour
{    

    public GameObject Target;//要裁剪的板子
    public GameObject Brush;//裁剪的笔刷
    

    GameObject newPanel;//裁剪后的板子
    CSG csgPanel;

    GameObject newCube;//被裁剪出来的方块
    CSG csgCube;    

    void Start()
    {
        CSG.EPSILON = 1e-5f;
        csgPanel = getCsg(CSG.Operation.Subtract);//裁剪后的板子
        csgCube = getCsg(CSG.Operation.Intersection);//被裁剪出来的方块
        btn.onClick.AddListener(onClick);       
    }

    //几何布尔运算
    CSG getCsg(CSG.Operation OperationType)
    {
        CSG csg;
        csg = new CSG();
        csg.Brush = Brush;
        csg.Target = Target;
        csg.OperationType = OperationType;
        csg.customMaterial = new Material(Shader.Find("Standard")); // 材质
        csg.useCustomMaterial = false; // 使用上面的材质来填充切口
        csg.hideGameObjects = true; // 操作后隐藏目标和画笔对象
        csg.keepSubmeshes = true; // 保持原始的网格和材质
        return csg;
    }

    void Update()
    {
        
    }

    

    void onClick()
    {
        CreateNewObj();
    }

    void CreateNewObj()
    {       

        if (newPanel != null)
        {
            Destroy(newPanel);
        }
        //生成裁剪后的板子
        newPanel = csgPanel.PerformCSG();
        newPanel.name = "newPanel";        
        newPanel.transform.SetParent(transform.parent);
        csgPanel.Target = newPanel;

        //生成被裁剪出来的方块
        newCube = csgCube.PerformCSG();
        newCube.name = "newCube";
        newCube.AddComponent<MeshCollider>().convex = true;
        newCube.GetComponent<Rigidbody>().isKinematic = false;
        newCube.transform.SetParent(transform.parent);
        csgCube.Target = newPanel;
       

        Brush.SetActive(true);
    }    
}

最终效果:

生成裁剪后的板子

生成被裁剪出来的方块

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值