unity编辑器工具扩展

unity编辑器扩展,文章仅供参考。
在Editor下新建脚本

using UnityEngine;
using System.Collections;
using UnityEditor;         //必须要包含

public class menu{

    //这是当时写的全局宏定义类。开发环境设置 :安卓,windows,Ios
    [MenuItem("工具/设置")]  //添加菜单栏按钮
    public static void Settings()  // 定义一个静态方法
    {
        SettingsWindows win = (SettingsWindows)EditorWindow.GetWindow(typeof(SettingsWindows));
        win.titleContent = new GUIContent("全局设置");
        win.Show();
    }
    
    // 打包管理类。
    [MenuItem("工具/打包")]
    public static void AssetBundleCreate()
    {
        AssetBundleWindows win =(AssetBundleWindows) EditorWindow.GetWindow(typeof(AssetBundleWindows));
        win.titleContent = new GUIContent("AssetBundle");
        win.Show();
    }
}

因为项目分为发布模式和调试模式,每个模式所要实现的功能补一下,比如:调试模式需要各种打印,而发布模式不行,所以会用到宏定义来实现区分。所以就写了这么一个编辑器工具来实现这个功能。

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

public class SettingsWindows : EditorWindow {

    private List m_List = new List();    //定义一个链表把需要的功能添加到链表里。

    private Dictionary m_Dic = new Dictionary(); //定义一个字典来区分发布模式和调试模式

    private string m_Macor = null;


    void OnEnable()
    {

        m_Macor = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android); //获取当前已经定义的宏
        m_List.Clear();
        m_List.Add(new MacorItem() { Name = "DEBUG_MODEL", DisplayName = "调试模式", IsDebug = true, IsRelease = false });
        m_List.Add(new MacorItem() { Name = "DEBUG_LOG", DisplayName = "打印日志", IsDebug = true, IsRelease = false });
        m_List.Add(new MacorItem() { Name = "STAT_TD", DisplayName = "开启统计", IsDebug = false, IsRelease = true });
        m_List.Add(new MacorItem() { Name = "DEBUG_ROLESTATE", DisplayName = "调试角色状态", IsDebug = false, IsRelease = false });
        m_List.Add(new MacorItem() { Name = "DISABLE_ASSETBUNDLE", DisplayName = "禁用AssetBundle", IsDebug = false, IsRelease = false });
        m_List.Add(new MacorItem() { Name = "HOTFIX_ENABLE", DisplayName = "开启热补丁", IsDebug = false, IsRelease = true });
        for (int i = 0; i < m_List.Count; i++)
        {
            if (!string.IsNullOrEmpty(m_Macor)&&m_Macor.IndexOf(m_List[i].Name)!=-1)  //m_Macor  包含已经定义的项
            {
                m_Dic[m_List[i].Name] = true;                          
            }
            else
            {
                m_Dic[m_List[i].Name] = false;
            }            
        }
    }
    void OnGUI()                //绘制出来
    {
        for (int i = 0; i < m_List.Count; i++)
        {
            EditorGUILayout.BeginHorizontal("box");
            m_Dic[m_List[i].Name] = GUILayout.Toggle(m_Dic[m_List[i].Name], m_List[i].DisplayName);
            EditorGUILayout.EndHorizontal();           
        }
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("保存",GUILayout.Width(100)))
        {
            SaveMacor();
        }
        if (GUILayout.Button("调试模式", GUILayout.Width(100)))
        {
            for (int i = 0; i < m_List.Count; i++)
            {
                m_Dic[m_List[i].Name] = m_List[i].IsDebug;
            }

        }
        if (GUILayout.Button("发布模式", GUILayout.Width(100)))
        {
            for (int i = 0; i < m_List.Count; i++)
            {
                m_Dic[m_List[i].Name] = m_List[i].IsRelease;
            }
        }

        EditorGUILayout.EndHorizontal();
 
    }
    private void SaveMacor()  // 保存选择
    {
        m_Macor = string.Empty;
        foreach (var item in m_Dic)
        {
            if (item.Value)
            {
                m_Macor += string.Format("{0};",item.Key);
            }
        }
        PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, m_Macor);
        PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, m_Macor);
        PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, m_Macor); //设置宏

    }

    public class MacorItem     //定义的类
    {
        public string Name;

        public string DisplayName;

        public bool IsDebug;

        public bool IsRelease;
    }
}

写好之后效果图如下unity编辑器工具扩展_第1张图片

你可能感兴趣的:(unity项目代码)