Unity编辑器扩展(一键删除脚本 丢失的脚本 collider 改变材质 删除多余组件等)

//**********************************************
//文件名: DeletCompent.cs
//
//作者: ****
创建时间:2021.08.20
//
//功能描述:用于一键删除场景中的组件 改变材质等
//
//备注:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class DeletCompent : EditorWindow
{
    [MenuItem("Tools/DeletCompent")]
    static void Win()
    {
        EditorWindow.GetWindow<DeletCompent>(false, "小工具", true).Show();
    }
    // Use this for initialization
    void OnGUI()
    {
        //GUILayout.Label("删除了" + UnityEngine.Object.FindObjectsOfType(typeof(MonoBehaviour)).Length + "个脚本");
        //mScroll = GUILayout.BeginScrollView(mScroll);
        if (GUILayout.Button("删除脚本"))
        {
            DeletScript();
        }
        if (GUILayout.Button("删除丢失脚本"))
        {
            DeletMissingScript();
        }
        if (GUILayout.Button("删除碰撞 刚体"))
        {
            DeletCollider();

        }
        if (GUILayout.Button("删除特效 音效"))
        {
            DeletCollider1();
        }
        if (GUILayout.Button("改变材质"))
        {
            ChangeMat();
        }

        //if (GUILayout.Button("删除相机"))
        //{
        //    DeletCamera();
        //}
        //if (GUILayout.Button("删除全部组件"))
        //{
        //    RemoveTest();
        //}

    }
    /// <summary>
    /// 删除脚本
    /// </summary>
    void DeletScript()
    {
        foreach (MonoBehaviour script in UnityEngine.Object.FindObjectsOfType(typeof(MonoBehaviour)))
        {



            DestroyImmediate(script);
        }
    }
    /// <summary>
    /// 删除丢失脚本
    /// </summary>
    void DeletMissingScript()
    {

        GameObject[] pAllObjects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject));



        int r;

        int j;
        for (int i = 0; i < pAllObjects.Length; i++)

        {
            if (pAllObjects[i].hideFlags == HideFlags.None)//HideFlags.None 获取Hierarchy面板所有Object

            {
                var components = pAllObjects[i].GetComponents<Component>();

                var serializedObject = new SerializedObject(pAllObjects[i]); // 将object序列化

                var prop = serializedObject.FindProperty("m_Component");  //得到object的Component序列化数组

                r = 0;
                for (j = 0; j < components.Length; j++)

                {
                    if (components[j] == null)

                    {
                        prop.DeleteArrayElementAtIndex(j - r);

                        r++;
                    }

                }
                serializedObject.ApplyModifiedProperties();
            }
        }
    }
    /// <summary>
    /// 删除碰撞 刚体
    /// </summary>
    void DeletCollider()
    {
        foreach (Collider collider in UnityEngine.Object.FindObjectsOfType(typeof(Collider)))
        {
            DestroyImmediate(collider);
        }
        foreach (Rigidbody collider in UnityEngine.Object.FindObjectsOfType(typeof(Rigidbody)))
        {
            DestroyImmediate(collider);
        }
    }
    /// <summary>
    /// 删除特效 音效
    /// </summary>
    void DeletCollider1()
    {
        foreach (AudioBehaviour collider in UnityEngine.Object.FindObjectsOfType(typeof(AudioBehaviour)))
        {
            DestroyImmediate(collider);
        }
        foreach (ParticleSystem collider in UnityEngine.Object.FindObjectsOfType(typeof(ParticleSystem)))
        {
            DestroyImmediate(collider);
        }
    }
    void ChangeMat()
    {
        foreach (MeshRenderer collider in UnityEngine.Object.FindObjectsOfType(typeof(MeshRenderer)))
        {
            collider.material = Resources.Load("Shader/Shader Forge_Visualization") as Material;
            collider.sharedMaterial.SetColor("_Color", Color.blue);
        }
    }
    /// <summary>
    /// 删除相机
    /// </summary>
    void DeletCamera()
    {
        foreach (FlareLayer camera in UnityEngine.Object.FindObjectsOfType(typeof(FlareLayer)))
        {
            DestroyImmediate(camera);
        }
       
        foreach (Camera camera in UnityEngine.Object.FindObjectsOfType(typeof(Camera)))
        {
            DestroyImmediate(camera);
        }
    }
    void RemoveTest()
    {
        //List<Component> comList = new List<Component>();
        //GameObject[] all = Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[];
        //for (int i = 0; i < all.Length; i++)
        //{
        //    var item = all[i];
        //    foreach (var component in item.GetComponents<Component>())
        //    {
        //        comList.Add(component);
        //        //Debug.Log(component.GetType());
        //    }
        //    //if (item.scene.isLoaded)
        //    //{
        //    //    Debug.Log("name:" + item.name);
        //    //}
        //}

        foreach (var component in gameObject.GetComponents<Component>())
        {
            comList.Add(component);
            Debug.Log(component.GetType());
        }
        //foreach (Component item in comList)
        //{
        //    DestroyImmediate(item);
        //}
        foreach (Component component in UnityEngine.Object.FindObjectsOfType(typeof(Component)))
        {

            DestroyImmediate(component);
        }
    }

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值