Debug.Log 可以讓unity3d顯示我們所需的log
但是如果過多的Log,會導致unity3d效能降低
這時候通常會使用Define的方式來避掉
例如
#if Debug
Debug.Log("error");
#endif
但是每次寫個log都要這樣寫也太麻煩了
所以會寫一個類別來管理, 就不直接使用unity提供的Debug了
例如
public class MyDebug {
public static void Log(string message) {
#if Debug
Debug.Log(message);
#endif
}
}
這樣雖然解決了麻煩, 但是有另一個麻煩出現了
當我們想要看log是哪一行程式碼時, 會點兩下console
這時候就會跳到該類別裡面, 變成需要看stack去回推到想要的程式碼
但是只要加入以下的Debug.cs之後, 一切問題都解決了
#if RELEASE
using System.Diagnostics;
using UnityEngine;
public static class Debug
{
[Conditional("RELEASE")] public static void Break(){}
[Conditional("RELEASE")] public static void ClearDeveloperConsole(){}
[Conditional("RELEASE")] public static void DebugBreak(){}
[Conditional("RELEASE")] public static void DrawLine(Vector3 start, Vector3 end){}
[Conditional("RELEASE")] public static void DrawLine(Vector3 start, Vector3 end, Color color){}
[Conditional("RELEASE")] public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration){}
[Conditional("RELEASE")] public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration, bool depthTest){}
[Conditional("RELEASE")] public static void DrawRay(Vector3 start, Vector3 dir){}
[Conditional("RELEASE")] public static void DrawRay(Vector3 start, Vector3 dir, Color color){}
[Conditional("RELEASE")] public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration){}
[Conditional("RELEASE")] public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration, bool depthTest){}
[Conditional("RELEASE")] public static void Log(object message){}
[Conditional("RELEASE")] public static void Log(object message, UnityEngine.Object context){}
[Conditional("RELEASE")] public static void LogError(object message){}
[Conditional("RELEASE")] public static void LogError(object message, UnityEngine.Object context){}
[Conditional("RELEASE")] public static void LogException(System.Exception exception){}
[Conditional("RELEASE")] public static void LogException(System.Exception exception, UnityEngine.Object context){}
[Conditional("RELEASE")] public static void LogWarning(object message){}
[Conditional("RELEASE")] public static void LogWarning(object message, UnityEngine.Object context){}
}
#endif
這樣只要在遊戲要發佈時加上RELEASE define後
所有log就會消失了, 點兩下log也成正確的跳到該行程式碼
關鍵就在於Conditional這個attribute
身為程式設計師, 你一定可以根據這份程式碼的邏輯以及這個attribute的作用
去發揮更多的功能出來, 去查查看吧