Unity编辑器脚本(添加/删除)碰撞盒

简介: 这段代码提供了两个Unity编辑器工具,用于批量处理模型的碰撞盒。一是“一键添加所有碰撞盒”,通过选择模型的父物体,自动为其子物体添加`MeshCollider`。二是“一键清理所有Collider碰撞盒”,同样选择父物体后,递归删除子物体上的`BoxCollider`组件。两者均通过Unity的菜单项实现便捷操作,方便开发者快速调整场景中的物理属性。

添加碰撞盒

只需要选择模型的父物体就好了
代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;

public class AddBox
{
    [MenuItem("Tools/一键添加所有碰撞盒")]
    private static void SelectionAnchor()
    {
        if (Selection.activeObject)
        {
            AddCollider((GameObject)Selection.activeObject);
        }

    }
    public static void AddCollider(GameObject obj)
    {
        if (obj.transform.childCount > 0)
        {
            for (int i = 0; i < obj.transform.childCount; i++)
            {
                Transform child = obj.transform.GetChild(i);
                if (child.GetComponent <MeshRenderer>())
                {
                    child.gameObject.AddComponent<MeshCollider>();
                }



                AddCollider(child.gameObject);
            }
        }
    }

}

删除碰撞盒

代码如下:


using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Destory_Box :EditorWindow
{
    [MenuItem("Tools/工具:一键清理所有Collider碰撞盒")]
    public static void ClearColiderByChild()
    {
        if (Selection.activeObject)
        {
            ClearMeshColiderByChild((GameObject)Selection.activeObject);
        }
    }
    public static void ClearMeshColiderByChild(GameObject obj)
    {
        //1.子物体有Mesh
        if (obj.transform.childCount > 0)
        {
            for (int i = 0; i < obj.transform.childCount; i++)
            {
                GameObject child = obj.transform.GetChild(i).gameObject;
                //MeshCollider meshCollider = child.GetComponent<MeshCollider>();
                //if (meshCollider != null)
                //{
                //    DestroyImmediate(meshCollider);
                //}
                BoxCollider boxCollider = child.GetComponent<BoxCollider>();
                if (boxCollider != null)
                {
                    //DestroyImmediate(boxCollider);
                    Debug.Log(boxCollider.name);
                }
                ClearMeshColiderByChild(child);
            }
        }
    }
}
相关文章
|
6月前
|
图形学
小功能⭐️Unity自动更改文本框高度,以显示全部文本
小功能⭐️Unity自动更改文本框高度,以显示全部文本
|
编解码
PS工具的使用,如编辑工具栏选项,前后景色,画笔工具,缩放工具,抓手工具,矢量工具
通过本文,你就能了解到PS基本工具的使用,以及相关的背景知识!
279 0
零基础VB教程063期:如何用代码直接创建控件?从此不必拖控件了
零基础VB教程063期:如何用代码直接创建控件?从此不必拖控件了
338 0
|
前端开发
Dreamweaver软件设置更改表格颜色的操作方法
Dreamweaver软件设置更改表格颜色的操作方法
731 0
|
定位技术 图形学 Windows
【琐琐碎碎小知识】 关于部分Unity编辑器在创建瓦片地图时缺乏Tiles选项
【琐琐碎碎小知识】 关于部分Unity编辑器在创建瓦片地图时缺乏Tiles选项
666 0
【琐琐碎碎小知识】 关于部分Unity编辑器在创建瓦片地图时缺乏Tiles选项
“想玩点花式?” 试试快捷键操作编辑器吧(Unity3D)
在使用Unity中可能需要使用快捷键执行一些操作,或者修改Unity自带的快捷键,接下来就看一下,如何设置自定义快捷键吧
|
Java
Java开发GUI之可编辑区域
Java开发GUI之可编辑区域
181 0
Java开发GUI之可编辑区域
GEF入门实例_总结_05_显示一个空白编辑器
一、前言 本文承接上一节:GEF入门实例_总结_04_Eclipse插件启动流程分析 在第三节( GEF入门实例_总结_03_显示菜单和工具栏  ),我们创建了菜单和工具栏。 这一节,我们来实现:点击菜单后,打开一个编辑器。
1509 0