Debug管理器

以前说过,可以控制Debug.unityLogger.logEnabled为false来全局控制输出,但是单单使用Debug.Log不好区分模块,也不好单独调试某一模块,一输出就全部输出了,很乱。

下一个就是自己封装Debug,用不同的方法表示不同模块,使用不同的开关控制模块输出,富文本输出不同的颜色区分,但是双击输出会定位到封装。

所以是封装成dll导入,Unity就不会定位到dll里面,而是上一层。但是,修改添加模块困难,所以这里封装成一个可扩展性的Debug管理器。

using UnityEngine;
namespace DebugLog
{
    public class MyDebug
    {
        public string Name;
        public string Color;
        public bool IsCanDebug = true;

        public MyDebug(string name, string color)
        {
            Name = name;
            Color = color;
        }

        public void Log(string mes)
        {
            if (IsCanDebug == false) return;

            string log = string.Format("<color={0}>{1}:</color>{2}", Color, Name, mes);
            Debug.Log(log);
        }
    }
}
using System.Collections.Generic;
namespace DebugLog
{
    public class DebugManager
    {
        public MyDebug Default = new MyDebug("Default", "yellow");
        public MyDebug UI = new MyDebug("UI","blue");
        public MyDebug Net = new MyDebug("Net", "green");
        public MyDebug Error = new MyDebug("Error", "red");
        public MyDebug Logic = new MyDebug("Logic", "#FF6633");

        private Dictionary<string, MyDebug> dic = new Dictionary<string, MyDebug>();

        public DebugManager()
        {
            dic.Add(Default.Name, Default);
            dic.Add(UI.Name, UI);
            dic.Add(Net.Name, Net);
            dic.Add(Error.Name, Error);
            dic.Add(Logic.Name, Logic);
        }

        public void AddMyDebug(string name, string color)
        {
            if (!dic.ContainsKey(name))
            {
                MyDebug debug = new MyDebug(name, color);
                dic.Add(name,debug);
            }
        }

        public MyDebug GetMyDebug(string name)
        {
            MyDebug debug = Default;
            if (dic.ContainsKey(name))
            {
                debug = dic[name];
            }

            return debug;
        }

        public void OpenAllDebug()
        {
            foreach (var i in dic)
            {
                i.Value.IsCanDebug = true;
            }
        }

        public void CloseAllDebug()
        {
            foreach (var i in dic)
            {
                i.Value.IsCanDebug = false;
            }
        }

        public void DebugOnly(string name)
        {
            if (!dic.ContainsKey(name)) return;

            CloseAllDebug();
            dic[name].IsCanDebug = true;
        }
    }
}


尽可能的把有的模块写成成员变量,方便使用时有提示,而不是使用Add后再用一个字符串的名字去获取这个Debug

实在是需要扩展,就可以直接Add再Get,也不需要重新修改导入dll了


首页 我的博客
粤ICP备17103704号