From b13763ebeed518a5c61aa24ac6775a639d5f23ef Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Fri, 7 Mar 2025 15:32:47 +0800 Subject: [PATCH] =?UTF-8?q?Android=20=E6=89=93=E5=8C=85=20=E9=A1=BA?= =?UTF-8?q?=E5=B8=A6=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/Scene/AxibugEmuOnline.Client.unity | 58 +++ .../GamingMultiKeysSetting.cs | 1 + .../AxiInputSP/UGUI/AxiIptButtonEditor.cs | 4 +- .../Assets/Script/AppMain/DebuggerByGUI.cs | 436 ++++++++++++++++++ .../Script/AppMain/DebuggerByGUI.cs.meta | 2 + .../Emulator/NesEmulator/NesEmulator.cs | 11 +- .../Assets/Script/AppMain/Initer.cs | 8 +- 7 files changed, 512 insertions(+), 8 deletions(-) create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/DebuggerByGUI.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/DebuggerByGUI.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity b/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity index a0cba087..eb2adf4c 100644 --- a/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity +++ b/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity @@ -119,6 +119,51 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &408101310 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 408101311} + - component: {fileID: 408101312} + m_Layer: 0 + m_Name: debugger + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &408101311 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 408101310} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.5490109, y: -3.056903, z: -0.117817014} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &408101312 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 408101310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96aeece13cf7354390e892fd61111b4, type: 3} + m_Name: + m_EditorClassIdentifier: + AllowDebugging: 1 --- !u!1 &1335662458 GameObject: m_ObjectHideFlags: 0 @@ -163,12 +208,24 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 980f937ad27ad8540afeb8b7f100997e, type: 3} m_Name: m_EditorClassIdentifier: + SHADER: + - {fileID: 4800000, guid: e44382c7b3957134cb4533224ff9eeaa, type: 3} + - {fileID: 4800000, guid: 57c38351364c92e45aef2dc17245b3ce, type: 3} + - {fileID: 4800000, guid: bab7d8f2e62367743930d118a37e824a, type: 3} + - {fileID: 4800000, guid: 5dd9160e7dde4dd4db07347ce4780217, type: 3} + - {fileID: 4800000, guid: 8e9191ac23b05c14fa2a62f037ce8261, type: 3} + - {fileID: 4800000, guid: fdf9f1937116ab84c97a58a4cf82fbf8, type: 3} + - {fileID: 4800000, guid: e36189d8343a744ff946d70df1adb684, type: 3} + - {fileID: 4800000, guid: 1fed85d45421d45a6ac770579285b756, type: 3} + - {fileID: 4800000, guid: d96e49db3173e49a4a0fcf6125cc7f4e, type: 3} IMPORTENT: {fileID: 4747871931704546037, guid: e6f56a07c0ec38946a0257a1e0b8926d, type: 3} + debugger: {fileID: 408101312} bTestSkipWebApiToConServer: 0 mTestSrvIP: 192.168.0.47 bUseLocalWebApi: 0 mLocalWebApi: http://localhost:5051 bEditorUUID: 0 + bEditorOpenGUIJoyStick: 0 --- !u!1 &1498586261 GameObject: m_ObjectHideFlags: 3 @@ -219,3 +276,4 @@ SceneRoots: m_Roots: - {fileID: 1498586263} - {fileID: 1335662459} + - {fileID: 408101311} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInputSP.Settings/GamingMultiKeysSetting.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInputSP.Settings/GamingMultiKeysSetting.cs index a0f060ae..979c3a9e 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInputSP.Settings/GamingMultiKeysSetting.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInputSP.Settings/GamingMultiKeysSetting.cs @@ -31,6 +31,7 @@ namespace AxiInputSP.Setting //TODO 待补全 controllers[0].SetKey((ulong)EnumCommand.OptionMenu, AxiInputEx.ByKeyCode(PC_XBOXKEY.L)); controllers[0].SetKey((ulong)EnumCommand.OptionMenu, AxiInputEx.ByKeyCode(PC_XBOXKEY.R)); + controllers[0].SetKey((ulong)EnumCommand.OptionMenu, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.HOME)); controllers[0].ColletAllKey(); } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInputSP/UGUI/AxiIptButtonEditor.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInputSP/UGUI/AxiIptButtonEditor.cs index d8ee8a5e..a782a62c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInputSP/UGUI/AxiIptButtonEditor.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInputSP/UGUI/AxiIptButtonEditor.cs @@ -1,3 +1,4 @@ +#if UNITY_EDITOR using AxiInputSP.UGUI; using UnityEditor; using UnityEditorInternal; @@ -65,4 +66,5 @@ namespace AxibugEmuOnline.Editors } } } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/DebuggerByGUI.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/DebuggerByGUI.cs new file mode 100644 index 00000000..9affce45 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/DebuggerByGUI.cs @@ -0,0 +1,436 @@ +using UnityEngine; +using System.Collections.Generic; +using System; +using UnityEngine.Profiling; + +public class DebuggerByGUI : 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() + { + DontDestroyOnLoad(this.gameObject); + 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; + } + } + + bool bUnityWaterFrist = false; + private void LogHandler(string condition, string stackTrace, LogType type) + { + if (condition.Contains("UnityWater") || stackTrace.Contains("UnityWater")) + { + if(bUnityWaterFrist) + return; + + bUnityWaterFrist = true; + } + + 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) + { + if (_expansion) + { + _windowRect = GUI.Window(0, _windowRect, ExpansionGUIWindow, "DEBUGGER"); + } + else + { + _windowRect = GUI.Window(0, _windowRect, ShrinkGUIWindow, "DEBUGGER"); + } + } + } + private void ExpansionGUIWindow(int windowId) + { + GUI.DragWindow(new Rect(0, 0, 10000, 20)); + + #region title + 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.Console ? Color.white : Color.gray); + if (GUILayout.Button("Console", GUILayout.Height(30))) + { + _debugType = DebugType.Console; + } + GUI.contentColor = (_debugType == DebugType.Memory ? Color.white : Color.gray); + if (GUILayout.Button("Memory", GUILayout.Height(30))) + { + _debugType = DebugType.Memory; + } + GUI.contentColor = (_debugType == DebugType.System ? Color.white : Color.gray); + if (GUILayout.Button("System", GUILayout.Height(30))) + { + _debugType = DebugType.System; + } + GUI.contentColor = (_debugType == DebugType.Screen ? Color.white : Color.gray); + if (GUILayout.Button("Screen", GUILayout.Height(30))) + { + _debugType = DebugType.Screen; + } + GUI.contentColor = (_debugType == DebugType.Quality ? Color.white : Color.gray); + if (GUILayout.Button("Quality", GUILayout.Height(30))) + { + _debugType = DebugType.Quality; + } + GUI.contentColor = (_debugType == DebugType.Environment ? Color.white : Color.gray); + if (GUILayout.Button("Environment", GUILayout.Height(30))) + { + _debugType = DebugType.Environment; + } + GUI.contentColor = Color.white; + GUILayout.EndHorizontal(); + #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; + } + + 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(); + } + } + 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 + 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 + GUILayout.Label("项目版本:" + Application.version); + GUILayout.Label("Unity版本:" + Application.unityVersion); + GUILayout.Label("公司名称:" + Application.companyName); + GUILayout.EndVertical(); + + GUILayout.BeginHorizontal(); + if (GUILayout.Button("退出程序")) + { + Application.Quit(); + } + GUILayout.EndHorizontal(); + } + #endregion + } + private void ShrinkGUIWindow(int windowId) + { + GUI.DragWindow(new Rect(0, 0, 10000, 20)); + + GUI.contentColor = _fpsColor; + if (GUILayout.Button("FPS:" + _fps, GUILayout.Width(80), GUILayout.Height(30))) + { + _expansion = true; + _windowRect.width = 600; + _windowRect.height = 360; + } + GUI.contentColor = Color.white; + } +} +public struct LogData +{ + public string time; + public string type; + public string message; + public string stackTrace; +} +public enum DebugType +{ + Console, + Memory, + System, + Screen, + Quality, + Environment +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/DebuggerByGUI.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/DebuggerByGUI.cs.meta new file mode 100644 index 00000000..343c0d38 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/DebuggerByGUI.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e96aeece13cf7354390e892fd61111b4 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/NesEmulator/NesEmulator.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/NesEmulator/NesEmulator.cs index 535bdea8..399cb2fb 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/NesEmulator/NesEmulator.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/NesEmulator/NesEmulator.cs @@ -165,7 +165,7 @@ namespace AxibugEmuOnline.Client public void Dispose() { StopGame(); - } + } #if UNITY_EDITOR /// <summary> @@ -196,15 +196,14 @@ namespace AxibugEmuOnline.Client UnityEditor.EditorUtility.SetDirty(db); UnityEditor.AssetDatabase.SaveAssets(); } +#endif + public Texture OutputPixel => VideoProvider.OutputPixel; + public RawImage DrawCanvas => VideoProvider.Drawer; public void GetAudioParams(out int frequency, out int channels) { AudioProvider.GetAudioParams(out frequency, out channels); } - - public Texture OutputPixel => VideoProvider.OutputPixel; - public RawImage DrawCanvas => VideoProvider.Drawer; - -#endif + } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs index 9f0054cc..f872fd0c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs @@ -1,4 +1,5 @@ using AxibugEmuOnline.Client.ClientCore; +using System.Collections.Generic; using UnityEngine; namespace AxibugEmuOnline.Client @@ -11,9 +12,13 @@ namespace AxibugEmuOnline.Client public static string dev_UUID; + [SerializeField] + List<Shader> SHADER; + [SerializeField] GameObject IMPORTENT; + public DebuggerByGUI debugger; #if UNITY_EDITOR @@ -27,9 +32,10 @@ namespace AxibugEmuOnline.Client private void Awake() { + GameObject.DontDestroyOnLoad(debugger); bool UseJoyStack = false; - if (Application.platform == RuntimePlatform.Android) + if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.WindowsEditor) { UseJoyStack = true; }