using UnityEngine;
using System.Collections.Generic;
using System;
using UnityEngine.Profiling;
public class Debugger : MonoBehaviour
{
/// <summary>
/// 是否允许调试
/// </summary>
public bool AllowDebugging = true;
private DebugType _debugType = DebugType.Console;
private List<LogData> _logInformations = new List<LogData>();
private int _currentLogIndex = -1;
private int _infoLogCount = 0;
private int _warningLogCount = 0;
private int _errorLogCount = 0;
private int _fatalLogCount = 0;
private bool _showInfoLog = true;
private bool _showWarningLog = true;
private bool _showErrorLog = true;
private bool _showFatalLog = true;
private Vector2 _scrollLogView = Vector2.zero;
private Vector2 _scrollCurrentLogView = Vector2.zero;
private Vector2 _scrollSystemView = Vector2.zero;
private bool _expansion = false;
private Rect _windowRect = new Rect(0, 0, 100, 60);
private int _fps = 0;
private Color _fpsColor = Color.white;
private int _frameNumber = 0;
private float _lastShowFPSTime = 0f;
private void Start()
{
if (AllowDebugging)
{
Application.logMessageReceived += LogHandler;
}
}
private void Update()
{
if (AllowDebugging)
{
_frameNumber += 1;
float time = Time.realtimeSinceStartup - _lastShowFPSTime;
if (time >= 1)
{
_fps = (int)(_frameNumber / time);
_frameNumber = 0;
_lastShowFPSTime = Time.realtimeSinceStartup;
}
}
}
private void OnDestory()
{
if (AllowDebugging)
{
Application.logMessageReceived -= LogHandler;
}
}
private void LogHandler(string condition, string stackTrace, LogType type)
{
LogData log = new LogData();
log.time = DateTime.Now.ToString("HH:mm:ss");
log.message = condition;
log.stackTrace = stackTrace;
if (type == LogType.Assert)
{
log.type = "Fatal";
_fatalLogCount += 1;
}
else if (type == LogType.Exception || type == LogType.Error)
{
log.type = "Error";
_errorLogCount += 1;
}
else if (type == LogType.Warning)
{
log.type = "Warning";
_warningLogCount += 1;
}
else if (type == LogType.Log)
{
log.type = "Info";
_infoLogCount += 1;
}
_logInformations.Add(log);
if (_warningLogCount > 0)
{
_fpsColor = Color.yellow;
}
if (_errorLogCount > 0)
{
_fpsColor = Color.red;
}
}
private void OnGUI()
{
if (AllowDebugging)
{