【Unity】game視窗除錯Debug
阿新 • • 發佈:2019-02-05
新建一個 GameObject 把指令碼拖上去
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DebugShow : MonoBehaviour { public bool Log = true; private bool isShowLog;//是否顯示日誌, public KeyCode keyOpenLog = KeyCode.O;//按鍵開啟/關閉日誌 private Vector2 m_scroll; public GUIStyle labelStyle;//日誌的OnGUI樣式設定 internal void OnEnable() { isShowLog = true;//當指令碼開啟,是否可以顯示日誌, Log = True;//這個變數也必須為True Application.logMessageReceived += HandleLog;//註冊Unity的日誌回撥 } internal void OnDisable() { Application.logMessageReceived -= HandleLog;//去掉Unity的日誌回撥 } private string m_logs; /// <summary> /// /// </summary> /// /// <param name="logString">錯誤資訊</param> /// /// <param name="stackTrace">跟蹤堆疊</param> /// /// <param name="type">錯誤型別</param> void HandleLog(string logString, string stackTrace, LogType type) { string[] splitStr = stackTrace.Split('\n'); string strType = ""; switch (type) {//給日誌型別加顏色 case LogType.Error: strType = "<color=red>" + type.ToString() + "</color>"; break; case LogType.Assert: break; case LogType.Warning: strType = "<color=yellow>" + type.ToString() + "</color>"; break; case LogType.Log: strType = "<color=white>" + type.ToString() + "</color>"; break; case LogType.Exception: break; default: break; } strType = strType.Length == 0 ? type.ToString() : strType;//如果沒有日誌型別,那麼就賦值一個型別 string strLog = "【—" + strType + "—】: \n" + logString + "\n" + splitStr[0] + "\t\n" + splitStr[1] + "\t\n\t\t<——————分割線——————>\n"; m_logs = strLog + m_logs; if (m_logs.Length>1024*8) {//如果字元超出長度是會報錯的,所以超出限制一下長度 m_logs = ""; m_logs = strLog + m_logs; } } void OnGUI() { if (!Log) return; if (isShowLog) { m_scroll = GUILayout.BeginScrollView(m_scroll); if (GUILayout.Button("清空日誌")) { m_logs = ""; } GUILayout.Label(m_logs, labelStyle); GUILayout.EndScrollView(); } } void Update() { if (Input.GetKeyUp(keyOpenLog)) { isShowLog = !isShowLog; } } }