以前说过,可以控制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了