自定义编辑器功能

自定义编辑器功能

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

/// 
/// 自定义unity编辑器功能
/// 
public class CutomEditorFunc : MonoBehaviour
{
#if UNITY_EDITOR
    /// 
    /// 移除当前场景中所有的MeshCollider组件
    /// 
    [ContextMenu("Func_RemoveAllMeshColliderOfCurrScene")]
    public void ReactiveObj()
    {
        List<MeshCollider> interactObjs = GetCurrentActiveSceneTypeObjs<MeshCollider>();
        foreach (var mc in interactObjs)
        {
            GameObject.DestroyImmediate(mc);
        }

        interactObjs.Clear();
        interactObjs = null;
    }


#endif

    /// 
    /// 此方法用来得到某场景下所有物体,查出所有挂载T类型的脚本
    /// 
    private static List<T> GetCurrentActiveSceneTypeObjs<T>(bool includeInactive = true)
    {
        List<T> objs = new List<T>();
        objs.Clear();
        GameObject[] rootGameObjects = getSceneRootGameObjects(GetCurrentActiveScene());
        for (int i = 0; i < rootGameObjects.Length; i++)
        {
            T[] objsTyps = rootGameObjects[i].transform.GetComponentsInChildren<T>(includeInactive);
            objs.AddRange(objsTyps);
        }
        objs.RemoveAll(x => x == null);
        return objs;
    }
    private static GameObject[] getSceneRootGameObjects(Scene scene)
    {
        return scene.GetRootGameObjects();
    }
    private static Scene GetCurrentActiveScene()
    {
        return SceneManager.GetActiveScene();
    }
}

你可能感兴趣的:(自定义编辑器功能)