Unity 3D 拓展编辑器 Unity 编辑器的源码

我用的反射的工具。

//--------------------------------

//--利用反射清空控制台

Unity 3D 拓展编辑器 Unity 编辑器的源码_第1张图片

using System.Reflection;
using UnityEditor;
using UnityEngine;

public class ClearConsoleMyTools
{
    [MenuItem("Tools/CreateConsole")]
    static void CreateConsole()
    {
        Debug.Log("CreateConsole");
    }
    [MenuItem("Tools/ClearConsole %# ")]
    static void ClearConsole()
    {
        Assembly assembly = Assembly.GetAssembly(typeof(Editor));
        MethodInfo methodInfo = assembly.GetType("UnityEditor.LogEntries").GetMethod("Clear");
        methodInfo.Invoke(new object(), null);
        GUIUtility.keyboardControl = 0;
    }

}

//-------------------------------------------------

//--获取EditorStyles样式

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

public class GetEditorStylesMyTools : EditorWindow
{
    static List styles = null;
    private Vector2 scrollPosition = Vector2.zero;

    [MenuItem("Window/EditorStylesWindow")]
    static void EditorStylesWindow()
    {
        GetEditorStylesMyTools window = GetWindow("EditorStylesWindow");
        window.Show();
        styles = new List();
        foreach (PropertyInfo fi in typeof(EditorStyles).GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
        {
            object o = fi.GetValue(null, null);
            if (o.GetType() == typeof(GUIStyle))
            {
                styles.Add(o as GUIStyle);
            }
        }
    }
    private void OnGUI()
    {
        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        for (int i = 0; i < styles.Count; i++)
        {
            GUILayout.Label("EditorStyles :" + styles[i].name, styles[i]);
        }
        GUILayout.EndScrollView();
    }
    private void OnDestroy()
    {
        styles.Clear();
    }
}

也是利用反射。

//-------------------------------------------------

//--获取内置图标样式

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

public class GetBuildInIconsMyTools : EditorWindow
{
    [MenuItem("Window/BuildInIconsWindow")]
    static void BuildInIcons()
    {
        GetBuildInIconsMyTools window = GetWindow("BuildInIcons");
        window.Show();
    }

    private Vector2 scroll;
    private List icons = null;
    private void Awake()
    {
        icons = new List();
        Texture2D[] t = Resources.FindObjectsOfTypeAll();
        foreach (Texture2D x in t)
        {
            Debug.unityLogger.logEnabled = false;
            GUIContent gc = EditorGUIUtility.IconContent(x.name);
            Debug.unityLogger.logEnabled = true;
            if (gc != null && gc.image != null)
            {
                icons.Add(x.name);
            }
        }
        Debug.Log("共有:" + icons.Count);
    }

    private void OnGUI()
    {
        scroll = GUILayout.BeginScrollView(scroll);
        float width = 50;
        int count = (int)(position.width / width);
        for (int i = 0; i < icons.Count; i += count)
        {
            GUILayout.BeginHorizontal();
            for (int j = 0; j < count; j++)
            {
                int index = i + j;
                if (index < icons.Count)
                {
                    if (GUILayout.Button(EditorGUIUtility.IconContent(icons[index]), GUILayout.Width(width), GUILayout.Height(30)))
                    {
                        Debug.Log("texture name :" + icons[index]);
                    }
                }
            }
            GUILayout.EndHorizontal();
        }
        GUILayout.EndScrollView();
    }
}

//-----------------------------

//--拓展默认面板

Unity 3D 拓展编辑器 Unity 编辑器的源码_第2张图片

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(DefaultAsset))]
public class InspectorFolderExpandMyTools : Editor
{
    public override void OnInspectorGUI()
    {
        string path = AssetDatabase.GetAssetPath(target);
        GUI.enabled = true;
        if (path.EndsWith(string.Empty))
        {
            GUILayout.Label("文件夹");
            if (GUILayout.Button("打印文件夹路径"))
            {
                Debug.Log(Application.dataPath.Remove(Application.dataPath.Length - 7) + path);
            }
        }
    }
}

 

你可能感兴趣的:(Unity,3D,游戏开发,第二版,学习笔记)