Unity编辑器扩展2-移除的碰撞(相同属性)

条件:

1,选择物体名字都包含的内容

2,带有碰撞属性

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class RemoveCollider : ScriptableWizard
{
    //定义菜单的路径
    [MenuItem("DCCTools/Collider/RemoveCollider")]
    static void CreateWizardTwo()
    {
        DisplayWizard<RemoveCollider>("移除碰撞", "确定");
    }
    [Header("物体信息")]
    [InspectorShow("选择物体名字包含的内容")]
    public List<string> preNameList = new List<string>();
    [InspectorShow("选择碰撞类型")]
    public ColliderType m_ColliderType = ColliderType.box;

    private void OnWizardCreate()
    {

        GameObject[] Prefabs = Selection.gameObjects;
        foreach (GameObject go in Prefabs)
        {
            for (int i = 0; i < preNameList.Count; i++)
            {
                EachObjectRemoveCollider(go, preNameList[i]);
            }
        }
    }
    private void OnWizardUpdate()
    {
        helpString = "";
        errorString = "";
        string Name = "";
        if (Selection.gameObjects.Length > 0)
        {
            GameObject[] Prefabs = Selection.gameObjects;

            foreach (GameObject go in Prefabs)
            {
                Name += go.name + "、";
            }
            helpString = "当前选择了" + Name + "物体";
        }
        else
        {
            errorString = "请选择物体";
        }
    }
    //选择的物体改变的时候调用
    private void OnSelectionChange()
    {
        OnWizardUpdate();
    }
    void EachObjectRemoveCollider(GameObject go, string preName)
    {
        if (go.name.Contains(preName))
        {
            if (go.GetComponent<MeshRenderer>())

                if (go.GetComponent<Collider>())
                {
                    RemoveColliderComponenet(go);
                }
        }
        Transform[] m_childTransformArray = go.GetComponentsInChildren<Transform>();
        if (m_childTransformArray.Length >= 1)
        {
            for (int i = 0; i < m_childTransformArray.Length; i++)
            {
                GameObject m_obj = m_childTransformArray[i].gameObject;
                if (m_childTransformArray[i].name.Contains(preName))
                {
                    if (m_obj.GetComponent<Collider>())
                    {
                        RemoveColliderComponenet(m_obj);
                    }
                }
            }
        }
    }
    void RemoveColliderComponenet( GameObject  obj)
    {
        MeshCollider m_MeshCollider = obj.GetComponent<MeshCollider>();
        if (m_MeshCollider != null)
        {
            //编辑模式下移除组件
            DestroyImmediate(m_MeshCollider);
        }
        BoxCollider m_BoxCollider = obj.GetComponent<BoxCollider>();
        if (m_BoxCollider != null)
        {
            DestroyImmediate(m_BoxCollider);
        }
    }
}

路过大神指点:当修改完之后,无法自动保存,很头疼,(有时候改完之后没注意,关闭下次打开,发现没起作用。。头疼)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值