private void Start() { if (AllowDebugging) { Application.logMessageReceived += LogHandler; } DebugDataManager.Init(); }
private void ExpansionGUIWindow(int windowId) { GUI.DragWindow(new Rect(0, 0, 10000, 20)); #region title GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUI.contentColor = _fpsColor; if (GUILayout.Button("FPS:" + _fps, GUILayout.Height(30))) { _expansion = false; _windowRect.width = 100; _windowRect.height = 60; } GUI.contentColor = (_debugType == DebugType.Data ? Color.white : Color.gray); if (GUILayout.Button("数据", GUILayout.Height(30))) { _debugType = DebugType.Data; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUI.contentColor = (_debugType == DebugType.Console ? Color.white : Color.gray); if (GUILayout.Button("输出", GUILayout.Height(30))) { _debugType = DebugType.Console; } GUI.contentColor = (_debugType == DebugType.Memory ? Color.white : Color.gray); if (GUILayout.Button("内存", GUILayout.Height(30))) { _debugType = DebugType.Memory; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUI.contentColor = (_debugType == DebugType.System ? Color.white : Color.gray); if (GUILayout.Button("系统", GUILayout.Height(30))) { _debugType = DebugType.System; } GUI.contentColor = (_debugType == DebugType.Screen ? Color.white : Color.gray); if (GUILayout.Button("屏幕", GUILayout.Height(30))) { _debugType = DebugType.Screen; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUI.contentColor = (_debugType == DebugType.Quality ? Color.white : Color.gray); if (GUILayout.Button("画质", GUILayout.Height(30))) { _debugType = DebugType.Quality; } GUI.contentColor = (_debugType == DebugType.Environment ? Color.white : Color.gray); if (GUILayout.Button("环境", GUILayout.Height(30))) { _debugType = DebugType.Environment; } GUI.contentColor = (_debugType == DebugType.Debug ? Color.white : Color.gray); if (GUILayout.Button("调试", GUILayout.Height(30))) { _debugType = DebugType.Debug; } GUI.contentColor = Color.white; GUILayout.EndHorizontal(); GUILayout.EndVertical(); #endregion #region console if (_debugType == DebugType.Console) { GUILayout.BeginHorizontal(); if (GUILayout.Button("Clear")) { _logInformations.Clear(); _fatalLogCount = 0; _warningLogCount = 0; _errorLogCount = 0; _infoLogCount = 0; _currentLogIndex = -1; _fpsColor = Color.white; } GUI.contentColor = (_showInfoLog ? Color.white : Color.gray); _showInfoLog = GUILayout.Toggle(_showInfoLog, "Info [" + _infoLogCount + "]"); GUI.contentColor = (_showWarningLog ? Color.white : Color.gray); _showWarningLog = GUILayout.Toggle(_showWarningLog, "Warning [" + _warningLogCount + "]"); GUI.contentColor = (_showErrorLog ? Color.white : Color.gray); _showErrorLog = GUILayout.Toggle(_showErrorLog, "Error [" + _errorLogCount + "]"); GUI.contentColor = (_showFatalLog ? Color.white : Color.gray); _showFatalLog = GUILayout.Toggle(_showFatalLog, "Fatal [" + _fatalLogCount + "]"); GUI.contentColor = Color.white; GUILayout.EndHorizontal(); _scrollLogView = GUILayout.BeginScrollView(_scrollLogView, "Box", GUILayout.Height(165)); for (int i = 0; i < _logInformations.Count; i++) { bool show = false; Color color = Color.white; switch (_logInformations[i].type) { case "Fatal": show = _showFatalLog; color = Color.red; break; case "Error": show = _showErrorLog; color = Color.red; break; case "Info": show = _showInfoLog; color = Color.white; break; case "Warning": show = _showWarningLog; color = Color.yellow; break; default: break; } try { if (show) { GUILayout.BeginHorizontal(); if (GUILayout.Toggle(_currentLogIndex == i, "")) { _currentLogIndex = i; } GUI.contentColor = color; GUILayout.Label("[" + _logInformations[i].type + "] "); GUILayout.Label("[" + _logInformations[i].time + "] "); GUILayout.Label(_logInformations[i].message); GUILayout.FlexibleSpace(); GUI.contentColor = Color.white; GUILayout.EndHorizontal(); } } catch (Exception) { _logInformations.Clear(); _fatalLogCount = 0; _warningLogCount = 0; _errorLogCount = 0; _infoLogCount = 0; _currentLogIndex = -1; _fpsColor = Color.white; show = false; UnityEngine.Debug.LogError("ShowMessageError"); } } GUILayout.EndScrollView(); _scrollCurrentLogView = GUILayout.BeginScrollView(_scrollCurrentLogView, "Box", GUILayout.Height(100)); if (_currentLogIndex != -1) { GUILayout.Label(_logInformations[_currentLogIndex].message + "\r\n\r\n" + _logInformations[_currentLogIndex].stackTrace); } GUILayout.EndScrollView(); } #endregion #region memory else if (_debugType == DebugType.Memory) { GUILayout.BeginHorizontal(); GUILayout.Label("Memory Information"); GUILayout.EndHorizontal(); GUILayout.BeginVertical("Box"); #if UNITY_5 GUILayout.Label("总内存:" + Profiler.GetTotalReservedMemory() / 1000000 + "MB"); GUILayout.Label("已占用内存:" + Profiler.GetTotalAllocatedMemory() / 1000000 + "MB"); GUILayout.Label("空闲中内存:" + Profiler.GetTotalUnusedReservedMemory() / 1000000 + "MB"); GUILayout.Label("总Mono堆内存:" + Profiler.GetMonoHeapSize() / 1000000 + "MB"); GUILayout.Label("已占用Mono堆内存:" + Profiler.GetMonoUsedSize() / 1000000 + "MB"); #endif #if UNITY_7 GUILayout.Label("总内存:" + Profiler.GetTotalReservedMemoryLong() / 1000000 + "MB"); GUILayout.Label("已占用内存:" + Profiler.GetTotalAllocatedMemoryLong() / 1000000 + "MB"); GUILayout.Label("空闲中内存:" + Profiler.GetTotalUnusedReservedMemoryLong() / 1000000 + "MB"); GUILayout.Label("总Mono堆内存:" + Profiler.GetMonoHeapSizeLong() / 1000000 + "MB"); GUILayout.Label("已占用Mono堆内存:" + Profiler.GetMonoUsedSizeLong() / 1000000 + "MB"); #endif #if UNITY_2018 || UNITY_2019 GUILayout.Label("总内存:" + Profiler.GetTotalReservedMemoryLong() / 1000000 + "MB"); GUILayout.Label("已占用内存:" + Profiler.GetTotalAllocatedMemoryLong() / 1000000 + "MB"); GUILayout.Label("空闲中内存:" + Profiler.GetTotalUnusedReservedMemoryLong() / 1000000 + "MB"); GUILayout.Label("总Mono堆内存:" + Profiler.GetMonoHeapSizeLong() / 1000000 + "MB"); GUILayout.Label("已占用Mono堆内存:" + Profiler.GetMonoUsedSizeLong() / 1000000 + "MB"); #endif GUILayout.EndVertical(); GUILayout.BeginHorizontal(); if (GUILayout.Button("卸载未使用的资源")) { Resources.UnloadUnusedAssets(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("使用GC垃圾回收")) { GC.Collect(); } GUILayout.EndHorizontal(); } #endregion #region system else if (_debugType == DebugType.System) { GUILayout.BeginHorizontal(); GUILayout.Label("System Information"); GUILayout.EndHorizontal(); _scrollSystemView = GUILayout.BeginScrollView(_scrollSystemView, "Box"); GUILayout.Label("操作系统:" + SystemInfo.operatingSystem); GUILayout.Label("系统内存:" + SystemInfo.systemMemorySize + "MB"); GUILayout.Label("处理器:" + SystemInfo.processorType); GUILayout.Label("处理器数量:" + SystemInfo.processorCount); GUILayout.Label("显卡:" + SystemInfo.graphicsDeviceName); GUILayout.Label("显卡类型:" + SystemInfo.graphicsDeviceType); GUILayout.Label("显存:" + SystemInfo.graphicsMemorySize + "MB"); GUILayout.Label("显卡标识:" + SystemInfo.graphicsDeviceID); GUILayout.Label("显卡供应商:" + SystemInfo.graphicsDeviceVendor); GUILayout.Label("显卡供应商标识码:" + SystemInfo.graphicsDeviceVendorID); GUILayout.Label("设备模式:" + SystemInfo.deviceModel); GUILayout.Label("设备名称:" + SystemInfo.deviceName); GUILayout.Label("设备类型:" + SystemInfo.deviceType); GUILayout.Label("设备标识:" + SystemInfo.deviceUniqueIdentifier); GUILayout.EndScrollView(); } #endregion #region screen else if (_debugType == DebugType.Screen) { GUILayout.BeginHorizontal(); GUILayout.Label("Screen Information"); GUILayout.EndHorizontal(); GUILayout.BeginVertical("Box"); GUILayout.Label("DPI:" + Screen.dpi); GUILayout.Label("分辨率:" + Screen.currentResolution.ToString()); GUILayout.EndVertical(); GUILayout.BeginHorizontal(); if (GUILayout.Button("全屏")) { Screen.SetResolution(Screen.currentResolution.width, Screen.currentResolution.height, !Screen.fullScreen); } GUILayout.EndHorizontal(); } #endregion #region Quality else if (_debugType == DebugType.Quality) { GUILayout.BeginHorizontal(); GUILayout.Label("Quality Information"); GUILayout.EndHorizontal(); GUILayout.BeginVertical("Box"); string value = ""; if (QualitySettings.GetQualityLevel() == 0) { value = " [最低]"; } else if (QualitySettings.GetQualityLevel() == QualitySettings.names.Length - 1) { value = " [最高]"; } GUILayout.Label("图形质量:" + QualitySettings.names[QualitySettings.GetQualityLevel()] + value); GUILayout.EndVertical(); GUILayout.BeginHorizontal(); if (GUILayout.Button("降低一级图形质量")) { QualitySettings.DecreaseLevel(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("提升一级图形质量")) { QualitySettings.IncreaseLevel(); } GUILayout.EndHorizontal(); } #endregion #region Environment else if (_debugType == DebugType.Environment) { GUILayout.BeginHorizontal(); GUILayout.Label("Environment Information"); GUILayout.EndHorizontal(); GUILayout.BeginVertical("Box"); GUILayout.Label("项目名称:" + Application.productName); #if UNITY_5 GUILayout.Label("项目ID:" + Application.bundleIdentifier); #endif #if UNITY_7 GUILayout.Label("项目ID:" + Application.identifier); #endif #if UNITY_2018 GUILayout.Label("项目ID:" + Application.identifier); #endif GUILayout.Label("项目版本:" + Application.version); GUILayout.Label("Unity版本:" + Application.unityVersion); GUILayout.Label("公司名称:" + Application.companyName); //GUILayout.Label("公司名称:" + Application); GUILayout.EndVertical(); GUILayout.BeginHorizontal(); if (GUILayout.Button("退出程序")) { Application.Quit(); } GUILayout.EndHorizontal(); } #endregion #region PlayerData else if (_debugType == DebugType.Data) { _scrollPlayerDataView = GUILayout.BeginScrollView(_scrollPlayerDataView, "Box", GUILayout.Height(300)); for (int i = 0; i < PlayerPrefsKey.Length; i++) { GUILayout.BeginHorizontal(); if (PlayerPrefs.HasKey(PlayerPrefsKey[i].key)) { GUILayout.Label("数据(" + PlayerPrefsKey[i].key + "):" + GetValueByType(PlayerPrefsKey[i].type, PlayerPrefsKey[i].key)); if (GUILayout.RepeatButton("增加")) { ChangeValueAdd(PlayerPrefsKey[i].type, PlayerPrefsKey[i].key); } if (GUILayout.Button("减少")) { ChangeValueDec(PlayerPrefsKey[i].type, PlayerPrefsKey[i].key); } GUILayout.BeginHorizontal(); GetValueByType(PlayerPrefsKey[i].type, PlayerPrefsKey[i].key); for (int j = 0; j < dataList.Count; j++) { if (dataList[j].key == PlayerPrefsKey[i].key) { var s = GUILayout.TextArea(dataList[j].value); if (GUILayout.Button("修改")) { ChangeValue(PlayerPrefsKey[i].type, PlayerPrefsKey[i].key, s); } } } GUILayout.EndHorizontal(); } else { GUILayout.Label("不存在数据:" + PlayerPrefsKey[i].key); if (PlayerPrefsKey[i].type != DataKeyTypeEnum.stringType) { if (GUILayout.Button("初始化")) { InitValue(PlayerPrefsKey[i].type, PlayerPrefsKey[i].key); } } } GUILayout.EndHorizontal(); } DebugDataManager.Draw(); GUILayout.EndScrollView(); if (GUILayout.Button("刷新数据")) { CallChangeUI?.Invoke(); } if (GUILayout.Button("清除数据")) { PlayerPrefs.DeleteAll(); } } #endregion #region 调试 else if (_debugType == DebugType.Debug) { GUILayout.BeginVertical("Box"); if (DebugerBoolList.Count == 0) { var i = GameObject.FindObjectsOfType <GameObject>(); foreach (var item in i) { var j = item.gameObject.GetComponent <IDebuger>(); if (j != null) { DebugerBoolList.Add(new DebugerStruct(j.AllowName, item)); } } } foreach (var item in DebugerBoolList) { if (item.debugerObject == null) { continue; } var script = item.debugerObject.GetComponent <IDebuger>(); if (script == null) { UnityEngine.Debug.LogWarning("Not Found IDebuger From " + item.name); continue; } script.AllowDebug = GUILayout.Toggle(script.AllowDebug, item.name); } GUILayout.EndVertical(); } #endregion }