├── .github ├── AAR Source (Android) │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── yasirkula │ │ │ └── unity │ │ │ ├── DebugConsole.java │ │ │ ├── DebugConsoleLogcatLogReceiver.java │ │ │ └── DebugConsoleLogcatLogger.java │ └── proguard.txt ├── Images │ ├── 1.png │ ├── 2.png │ └── 3.png └── README.md ├── LICENSE.txt ├── LICENSE.txt.meta ├── Plugins.meta ├── Plugins ├── IngameDebugConsole.meta └── IngameDebugConsole │ ├── Android.meta │ ├── Android │ ├── DebugLogLogcatListener.cs │ ├── DebugLogLogcatListener.cs.meta │ ├── IngameDebugConsole.aar │ └── IngameDebugConsole.aar.meta │ ├── Editor.meta │ ├── Editor │ ├── DebugLogManagerEditor.cs │ ├── DebugLogManagerEditor.cs.meta │ ├── IngameDebugConsole.Editor.asmdef │ └── IngameDebugConsole.Editor.asmdef.meta │ ├── IngameDebugConsole.Runtime.asmdef │ ├── IngameDebugConsole.Runtime.asmdef.meta │ ├── IngameDebugConsole.prefab │ ├── IngameDebugConsole.prefab.meta │ ├── Prefabs.meta │ ├── Prefabs │ ├── CommandSuggestion.prefab │ ├── CommandSuggestion.prefab.meta │ ├── DebugLogItem.prefab │ └── DebugLogItem.prefab.meta │ ├── README.txt │ ├── README.txt.meta │ ├── Scripts.meta │ ├── Scripts │ ├── Attributes.meta │ ├── Attributes │ │ ├── ConsoleAttribute.cs │ │ ├── ConsoleAttribute.cs.meta │ │ ├── ConsoleCustomTypeParserAttribute.cs │ │ ├── ConsoleCustomTypeParserAttribute.cs.meta │ │ ├── ConsoleMethodAttribute.cs │ │ └── ConsoleMethodAttribute.cs.meta │ ├── CircularBuffer.cs │ ├── CircularBuffer.cs.meta │ ├── DebugLogConsole.cs │ ├── DebugLogConsole.cs.meta │ ├── DebugLogEntry.cs │ ├── DebugLogEntry.cs.meta │ ├── DebugLogItem.cs │ ├── DebugLogItem.cs.meta │ ├── DebugLogItemCopyWebGL.cs │ ├── DebugLogItemCopyWebGL.cs.meta │ ├── DebugLogManager.cs │ ├── DebugLogManager.cs.meta │ ├── DebugLogPopup.cs │ ├── DebugLogPopup.cs.meta │ ├── DebugLogRecycledListView.cs │ ├── DebugLogRecycledListView.cs.meta │ ├── DebugLogResizeListener.cs │ ├── DebugLogResizeListener.cs.meta │ ├── DebugsOnScrollListener.cs │ ├── DebugsOnScrollListener.cs.meta │ ├── EventSystemHandler.cs │ └── EventSystemHandler.cs.meta │ ├── Sprites.meta │ ├── Sprites │ ├── IconClear.psd │ ├── IconClear.psd.meta │ ├── IconCollapse.psd │ ├── IconCollapse.psd.meta │ ├── IconError.psd │ ├── IconError.psd.meta │ ├── IconHide.psd │ ├── IconHide.psd.meta │ ├── IconInfo.psd │ ├── IconInfo.psd.meta │ ├── IconResizeAllDirections.psd │ ├── IconResizeAllDirections.psd.meta │ ├── IconResizeVertialOnly.psd │ ├── IconResizeVertialOnly.psd.meta │ ├── IconSnapToBottom.psd │ ├── IconSnapToBottom.psd.meta │ ├── IconSnapToBottomBg.psd │ ├── IconSnapToBottomBg.psd.meta │ ├── IconWarning.psd │ ├── IconWarning.psd.meta │ ├── IngameDebugConsoleSpriteAtlas.spriteatlas │ ├── IngameDebugConsoleSpriteAtlas.spriteatlas.meta │ ├── SearchIcon.psd │ ├── SearchIcon.psd.meta │ ├── SlicedBackground.psd │ ├── SlicedBackground.psd.meta │ ├── SlicedBackground2.psd │ ├── SlicedBackground2.psd.meta │ ├── SlicedBackground3.psd │ ├── SlicedBackground3.psd.meta │ ├── Unused.meta │ └── Unused │ │ ├── IconErrorHighRes.psd │ │ ├── IconErrorHighRes.psd.meta │ │ ├── IconInfoHighRes.psd │ │ ├── IconInfoHighRes.psd.meta │ │ ├── IconWarningHighRes.psd │ │ └── IconWarningHighRes.psd.meta │ ├── WebGL.meta │ └── WebGL │ ├── IngameDebugConsole.jslib │ └── IngameDebugConsole.jslib.meta ├── package.json └── package.json.meta /.github/AAR Source (Android)/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.github/AAR Source (Android)/java/com/yasirkula/unity/DebugConsole.java: -------------------------------------------------------------------------------- 1 | package com.yasirkula.unity; 2 | 3 | import android.content.ClipData; 4 | import android.content.ClipboardManager; 5 | import android.content.Context; 6 | 7 | /** 8 | * Created by yasirkula on 6.04.2020. 9 | */ 10 | 11 | public class DebugConsole 12 | { 13 | public static void CopyText( Context context, String text ) 14 | { 15 | ClipboardManager clipboard = (ClipboardManager) context.getSystemService( Context.CLIPBOARD_SERVICE ); 16 | ClipData clip = ClipData.newPlainText( "log", text ); 17 | clipboard.setPrimaryClip( clip ); 18 | } 19 | } -------------------------------------------------------------------------------- /.github/AAR Source (Android)/java/com/yasirkula/unity/DebugConsoleLogcatLogReceiver.java: -------------------------------------------------------------------------------- 1 | package com.yasirkula.unity; 2 | 3 | /** 4 | * Created by yasirkula on 7.11.2017. 5 | */ 6 | 7 | public interface DebugConsoleLogcatLogReceiver 8 | { 9 | void OnLogReceived( String log ); 10 | } -------------------------------------------------------------------------------- /.github/AAR Source (Android)/java/com/yasirkula/unity/DebugConsoleLogcatLogger.java: -------------------------------------------------------------------------------- 1 | package com.yasirkula.unity; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.IOException; 5 | import java.io.InputStreamReader; 6 | 7 | /** 8 | * Created by yasirkula on 7.11.2017. 9 | */ 10 | 11 | public class DebugConsoleLogcatLogger 12 | { 13 | private static class LogcatWorker implements Runnable 14 | { 15 | private DebugConsoleLogcatLogReceiver logReceiver; 16 | private String command; 17 | 18 | private volatile boolean running = true; 19 | 20 | public LogcatWorker( DebugConsoleLogcatLogReceiver logReceiver, String command ) 21 | { 22 | this.logReceiver = logReceiver; 23 | this.command = command; 24 | } 25 | 26 | @Override 27 | public void run() 28 | { 29 | // Credit: http://chintanrathod.com/read-logs-programmatically-in-android/ 30 | try 31 | { 32 | Runtime.getRuntime().exec( "logcat -c" ); 33 | 34 | Process process = Runtime.getRuntime().exec( command ); 35 | BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( process.getInputStream() ) ); 36 | 37 | String line; 38 | while( running ) 39 | { 40 | while( ( line = bufferedReader.readLine() ) != null ) 41 | logReceiver.OnLogReceived( line ); 42 | 43 | try 44 | { 45 | Thread.sleep( 1000L ); 46 | } 47 | catch( InterruptedException e ) 48 | { 49 | } 50 | } 51 | } 52 | catch( IOException e ) 53 | { 54 | } 55 | } 56 | 57 | public void terminate() 58 | { 59 | running = false; 60 | } 61 | } 62 | 63 | private LogcatWorker worker; 64 | 65 | public void Start( DebugConsoleLogcatLogReceiver logReceiver, String arguments ) 66 | { 67 | Stop(); 68 | 69 | if( logReceiver == null ) 70 | return; 71 | 72 | String command = "logcat"; 73 | if( arguments != null ) 74 | { 75 | arguments = arguments.trim(); 76 | if( arguments.length() > 0 ) 77 | command += " " + arguments; 78 | } 79 | 80 | worker = new LogcatWorker( logReceiver, command ); 81 | Thread thread = new Thread( worker ); 82 | thread.start(); 83 | } 84 | 85 | public void Stop() 86 | { 87 | if( worker != null ) 88 | { 89 | worker.terminate(); 90 | worker = null; 91 | } 92 | } 93 | } -------------------------------------------------------------------------------- /.github/AAR Source (Android)/proguard.txt: -------------------------------------------------------------------------------- 1 | -keep class com.yasirkula.unity.* { *; } -------------------------------------------------------------------------------- /.github/Images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/.github/Images/1.png -------------------------------------------------------------------------------- /.github/Images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/.github/Images/2.png -------------------------------------------------------------------------------- /.github/Images/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/.github/Images/3.png -------------------------------------------------------------------------------- /.github/README.md: -------------------------------------------------------------------------------- 1 | # In-game Debug Console for Unity 3D 2 | 3 | screenshot screenshot2 4 | 5 | **Available on Asset Store:** https://assetstore.unity.com/packages/tools/gui/in-game-debug-console-68068 6 | 7 | **Forum Thread:** http://forum.unity3d.com/threads/in-game-debug-console-with-ugui-free.411323/ 8 | 9 | **Discord:** https://discord.gg/UJJt549AaV 10 | 11 | **[GitHub Sponsors ☕](https://github.com/sponsors/yasirkula)** 12 | 13 | ## ABOUT 14 | 15 | This asset helps you see debug messages (logs, warnings, errors, exceptions) runtime in a build (also assertions in editor) and execute commands using its built-in console. It also supports logging *logcat* messages to the console on Android platform. 16 | 17 | User interface is created with **uGUI** and costs **1 SetPass call** (and 6 to 10 batches) when *Sprite Packing* is enabled. It is possible to resize or hide the console window during the game. Once the console is hidden, a small popup will take its place (which can be dragged around). The popup will show the number of logs that arrived since it had appeared. Console window will reappear after clicking the popup. 18 | 19 | ![popup](Images/3.png) 20 | 21 | Console window is optimized using a customized recycled list view that calls *Instantiate* function sparingly. 22 | 23 | ## INSTALLATION 24 | 25 | There are 5 ways to install this plugin: 26 | 27 | - import [IngameDebugConsole.unitypackage](https://github.com/yasirkula/UnityIngameDebugConsole/releases) via *Assets-Import Package* 28 | - clone/[download](https://github.com/yasirkula/UnityIngameDebugConsole/archive/master.zip) this repository and move the *Plugins* folder to your Unity project's *Assets* folder 29 | - import it from [Asset Store](https://assetstore.unity.com/packages/tools/gui/in-game-debug-console-68068) 30 | - *(via Package Manager)* click the + button and install the package from the following git URL: 31 | - `https://github.com/yasirkula/UnityIngameDebugConsole.git` 32 | - *(via [OpenUPM](https://openupm.com))* after installing [openupm-cli](https://github.com/openupm/openupm-cli), run the following command: 33 | - `openupm add com.yasirkula.ingamedebugconsole` 34 | 35 | ## FAQ 36 | 37 | - **New Input System isn't supported on Unity 2019.2.5 or earlier** 38 | 39 | Add `ENABLE_INPUT_SYSTEM` compiler directive to **Player Settings/Scripting Define Symbols** (these symbols are platform specific, so if you change the active platform later, you'll have to add the compiler directive again). 40 | 41 | - **"Unity.InputSystem" assembly can't be resolved on Unity 2018.4 or earlier** 42 | 43 | Remove `Unity.InputSystem` assembly from **IngameDebugConsole.Runtime** Assembly Definition File's *Assembly Definition References* list. 44 | 45 | - **"Receive Logcat Logs In Android" isn't working, it says "java.lang.ClassNotFoundException: com.yasirkula.unity.DebugConsoleLogcatLogger" in Logcat** 46 | 47 | If you are sure that your plugin is up-to-date, then enable **Custom Proguard File** option from *Player Settings* and add the following line to that file: `-keep class com.yasirkula.unity.* { *; }` 48 | 49 | ## HOW TO 50 | 51 | Simply place **IngameDebugConsole** prefab to your scene. Hovering the cursor over its properties in the Inspector will reveal explanatory tooltips. 52 | 53 | While testing on Unity editor, right clicking a log entry will open the corresponding line in external script editor, similar to double clicking a log in Unity Console. 54 | 55 | ## COMMAND CONSOLE 56 | 57 | ### Executing Commands 58 | 59 | You can enter commands using the input field at the bottom of the console. To see all available commands, simply type "*help*". 60 | 61 | A command is basically a function that can be called from the console via the command input field. This function can be **static** or an **instance function** (non static), in which case, a living instance is required to call the function. The return type of the function can be anything (including *void*). If the function returns an object, it will be printed to the console. The function can also take any number of parameters; the only restriction applies to the types of these parameters. Supported parameter types are: 62 | 63 | **Primitive types, enums, string, Vector2, Vector3, Vector4, Color, Color32, Vector2Int, Vector3Int, Quaternion, Rect, RectInt, RectOffset, Bounds, BoundsInt, GameObject, any Component type, arrays/Lists of these supported types** 64 | 65 | Note that *GameObject* and *Component* parameters are assigned value using *GameObject.Find*. 66 | 67 | To call a registered command, simply write down the command and then provide the necessary parameters. For example: 68 | 69 | `cube [0 2.5 0]` 70 | 71 | To see the syntax of a command, see the help log: 72 | 73 | `- cube: Creates a cube at specified position -> TestScript.CreateCubeAt(Vector3 position)` 74 | 75 | Here, the command is *cube* and it takes a single *Vector3* parameter. This command calls the *CreateCubeAt* function in the *TestScript* script (see example code below for implementation details). 76 | 77 | Console uses a simple algorithm to parse the command input and has some restrictions: 78 | 79 | - Wrap strings with quotation marks ( " or ' ) 80 | - Wrap vectors with brackets ( \[\] ) or parentheses ( () ) 81 | 82 | However, there is some flexibility in the syntax, as well: 83 | 84 | - You can provide an empty vector to represent Vector_.zero: \[\] 85 | - You can enter 1 instead of true, or 0 instead of false 86 | - You can enter `null` for null GameObject and/or Component parameters 87 | 88 | ### Registering Custom Commands 89 | 90 | If all the parameters of a function are of supported types, you can register the function to the console in four different ways (all of these methods take optional string parameter(s) at the end to specify custom display names for the registered function's parameter(s)): 91 | 92 | - **ConsoleMethod Attribute** *(not supported on UWP platform)* 93 | 94 | Simply add **IngameDebugConsole.ConsoleMethod** attribute to your functions. These functions must be *public static* and must reside in a *public* class. These constraints do not apply to the other 3 methods. 95 | 96 | ```csharp 97 | using UnityEngine; 98 | using IngameDebugConsole; 99 | 100 | public class TestScript : MonoBehaviour 101 | { 102 | [ConsoleMethod( "cube", "Creates a cube at specified position" )] 103 | public static void CreateCubeAt( Vector3 position ) 104 | { 105 | GameObject.CreatePrimitive( PrimitiveType.Cube ).transform.position = position; 106 | } 107 | } 108 | ``` 109 | 110 | - **Strongly Typed Functions** 111 | 112 | Use one of the `DebugLogConsole.AddCommand( string command, string description, System.Action method )` variants: 113 | 114 | ```csharp 115 | using UnityEngine; 116 | using IngameDebugConsole; 117 | 118 | public class TestScript : MonoBehaviour 119 | { 120 | void Start() 121 | { 122 | DebugLogConsole.AddCommand( "destroy", "Destroys " + name, Destroy ); 123 | DebugLogConsole.AddCommand( "cube", "Creates a cube at specified position", CreateCubeAt ); 124 | DebugLogConsole.AddCommand( "child", "Creates a new child object under " + name, AddChild ); 125 | } 126 | 127 | void Destroy() 128 | { 129 | Destroy( gameObject ); 130 | } 131 | 132 | public static void CreateCubeAt( Vector3 position ) 133 | { 134 | GameObject.CreatePrimitive( PrimitiveType.Cube ).transform.position = position; 135 | } 136 | 137 | private GameObject AddChild( string name ) 138 | { 139 | GameObject child = new GameObject( name ); 140 | child.transform.SetParent( transform ); 141 | 142 | return child; 143 | } 144 | } 145 | ``` 146 | 147 | - **Static Functions (weakly typed)** 148 | 149 | Use `DebugLogConsole.AddCommandStatic( string command, string description, string methodName, System.Type ownerType )`. Here, **methodName** is the name of the method in string format, and **ownerType** is the type of the owner class. It may seem strange to provide the method name in string and/or provide the type of the class; however, after hours of research, I found it the best way to register any function with any number of parameters and parameter types into the system without knowing the signature of the method. 150 | 151 | ```csharp 152 | using UnityEngine; 153 | using IngameDebugConsole; 154 | 155 | public class TestScript : MonoBehaviour 156 | { 157 | void Start() 158 | { 159 | DebugLogConsole.AddCommandStatic( "cube", "Creates a cube at specified position", "CreateCubeAt", typeof( TestScript ) ); 160 | } 161 | 162 | public static void CreateCubeAt( Vector3 position ) 163 | { 164 | GameObject.CreatePrimitive( PrimitiveType.Cube ).transform.position = position; 165 | } 166 | } 167 | ``` 168 | 169 | - **Instance Functions (weakly typed)** 170 | 171 | Use `DebugLogConsole.AddCommandInstance( string command, string description, string methodName, object instance )`: 172 | 173 | ```csharp 174 | using UnityEngine; 175 | using IngameDebugConsole; 176 | 177 | public class TestScript : MonoBehaviour 178 | { 179 | void Start() 180 | { 181 | DebugLogConsole.AddCommandInstance( "cube", "Creates a cube at specified position", "CreateCubeAt", this ); 182 | } 183 | 184 | void CreateCubeAt( Vector3 position ) 185 | { 186 | GameObject.CreatePrimitive( PrimitiveType.Cube ).transform.position = position; 187 | } 188 | } 189 | ``` 190 | 191 | The only difference with *AddCommandStatic* is that, you have to provide an actual instance of the class that owns the function, instead of the type of the class. 192 | 193 | ### Removing Commands 194 | 195 | Use `DebugLogConsole.RemoveCommand( string command )` or one of the `DebugLogConsole.RemoveCommand( System.Action method )` variants. 196 | 197 | ### Extending Supported Parameter Types 198 | 199 | - **Strongly Typed Functions** 200 | 201 | Use `DebugLogConsole.AddCustomParameterType( Type type, ParseFunction parseFunction, string typeReadableName = null )`: 202 | 203 | ```csharp 204 | using UnityEngine; 205 | using IngameDebugConsole; 206 | 207 | public class TestScript : MonoBehaviour 208 | { 209 | public class Person 210 | { 211 | public string Name; 212 | public int Age; 213 | } 214 | 215 | void Start() 216 | { 217 | // Person parameters can now be used in commands, e.g. ('John Doe' 18) 218 | DebugLogConsole.AddCustomParameterType( typeof( Person ), ParsePerson ); 219 | } 220 | 221 | private static bool ParsePerson( string input, out object output ) 222 | { 223 | // Split the input 224 | // This will turn ('John Doe' 18) into 2 strings: "John Doe" (without quotes) and "18" (without quotes) 225 | List inputSplit = new List( 2 ); 226 | DebugLogConsole.FetchArgumentsFromCommand( input, inputSplit ); 227 | 228 | // We need 2 parameters: Name and Age 229 | if( inputSplit.Count != 2 ) 230 | { 231 | output = null; 232 | return false; 233 | } 234 | 235 | // Try parsing the age 236 | object age; 237 | if( !DebugLogConsole.ParseInt( inputSplit[1], out age ) ) 238 | { 239 | output = null; 240 | return false; 241 | } 242 | 243 | // Create the resulting object and assign it to output 244 | output = new Person() 245 | { 246 | Name = inputSplit[0], 247 | Age = (int) age 248 | }; 249 | 250 | // Successfully parsed! 251 | return true; 252 | } 253 | } 254 | ``` 255 | 256 | - **ConsoleCustomTypeParser Attribute** 257 | 258 | Simply add **IngameDebugConsole.ConsoleCustomTypeParser** attribute to your functions. These functions must have the following signature: `public static bool ParseFunction( string input, out object output );` 259 | 260 | ```csharp 261 | using UnityEngine; 262 | using IngameDebugConsole; 263 | 264 | public class TestScript : MonoBehaviour 265 | { 266 | [ConsoleCustomTypeParser( typeof( Person ) )] 267 | public static bool ParsePerson( string input, out object output ) 268 | { 269 | // Same as above... 270 | } 271 | } 272 | ``` 273 | 274 | ### Removing Supported Custom Parameter Types 275 | 276 | Use `DebugLogConsole.RemoveCustomParameterType( Type type )`. 277 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Süleyman Yasir KULA 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e7f42c787785fb447918340e47e9f699 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8db108c766c7fbf48b8422c536f13b9d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3c57523b63ddb094b835b6613da12763 3 | folderAsset: yes 4 | timeCreated: 1465915359 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Android.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d7d7a61a5341904eb3c65af025b1d86 3 | folderAsset: yes 4 | timeCreated: 1510075633 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs: -------------------------------------------------------------------------------- 1 | #if (UNITY_EDITOR || UNITY_ANDROID) && UNITY_ANDROID_JNI 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | // Credit: https://stackoverflow.com/a/41018028/2373034 6 | namespace IngameDebugConsole 7 | { 8 | public class DebugLogLogcatListener : AndroidJavaProxy 9 | { 10 | private Queue queuedLogs; 11 | private AndroidJavaObject nativeObject; 12 | 13 | public DebugLogLogcatListener() : base( "com.yasirkula.unity.DebugConsoleLogcatLogReceiver" ) 14 | { 15 | queuedLogs = new Queue( 16 ); 16 | } 17 | 18 | ~DebugLogLogcatListener() 19 | { 20 | Stop(); 21 | 22 | if( nativeObject != null ) 23 | nativeObject.Dispose(); 24 | } 25 | 26 | public void Start( string arguments ) 27 | { 28 | if( nativeObject == null ) 29 | nativeObject = new AndroidJavaObject( "com.yasirkula.unity.DebugConsoleLogcatLogger" ); 30 | 31 | nativeObject.Call( "Start", this, arguments ); 32 | } 33 | 34 | public void Stop() 35 | { 36 | if( nativeObject != null ) 37 | nativeObject.Call( "Stop" ); 38 | } 39 | 40 | [UnityEngine.Scripting.Preserve] 41 | public void OnLogReceived( string log ) 42 | { 43 | queuedLogs.Enqueue( log ); 44 | } 45 | 46 | public string GetLog() 47 | { 48 | if( queuedLogs.Count > 0 ) 49 | return queuedLogs.Dequeue(); 50 | 51 | return null; 52 | } 53 | } 54 | } 55 | #endif -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dd3b7385882055d4a8c2b91deb6b2470 3 | timeCreated: 1510076185 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf909fab1c14af446b0a854de42289b2 3 | timeCreated: 1510086220 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 2 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | isOverridable: 0 11 | platformData: 12 | data: 13 | first: 14 | Android: Android 15 | second: 16 | enabled: 1 17 | settings: {} 18 | data: 19 | first: 20 | Any: 21 | second: 22 | enabled: 0 23 | settings: {} 24 | data: 25 | first: 26 | Editor: Editor 27 | second: 28 | enabled: 0 29 | settings: 30 | DefaultValueInitialized: true 31 | userData: 32 | assetBundleName: 33 | assetBundleVariant: 34 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 86f54622630720f4abe279acdbb8886f 3 | folderAsset: yes 4 | timeCreated: 1561217660 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | using UnityEngine; 3 | 4 | namespace IngameDebugConsole 5 | { 6 | [CustomEditor( typeof( DebugLogManager ) )] 7 | public class DebugLogManagerEditor : Editor 8 | { 9 | private SerializedProperty singleton; 10 | private SerializedProperty minimumHeight; 11 | private SerializedProperty enableHorizontalResizing; 12 | private SerializedProperty resizeFromRight; 13 | private SerializedProperty minimumWidth; 14 | private SerializedProperty logWindowOpacity; 15 | private SerializedProperty popupOpacity; 16 | private SerializedProperty popupVisibility; 17 | private SerializedProperty popupVisibilityLogFilter; 18 | private SerializedProperty startMinimized; 19 | private SerializedProperty toggleWithKey; 20 | private SerializedProperty toggleKey; 21 | private SerializedProperty enableSearchbar; 22 | private SerializedProperty topSearchbarMinWidth; 23 | private SerializedProperty receiveLogsWhileInactive; 24 | private SerializedProperty receiveInfoLogs; 25 | private SerializedProperty receiveWarningLogs; 26 | private SerializedProperty receiveErrorLogs; 27 | private SerializedProperty receiveExceptionLogs; 28 | private SerializedProperty captureLogTimestamps; 29 | private SerializedProperty alwaysDisplayTimestamps; 30 | private SerializedProperty maxLogCount; 31 | private SerializedProperty logsToRemoveAfterMaxLogCount; 32 | private SerializedProperty queuedLogLimit; 33 | private SerializedProperty clearCommandAfterExecution; 34 | private SerializedProperty commandHistorySize; 35 | private SerializedProperty showCommandSuggestions; 36 | private SerializedProperty receiveLogcatLogsInAndroid; 37 | private SerializedProperty logcatArguments; 38 | private SerializedProperty avoidScreenCutout; 39 | private SerializedProperty popupAvoidsScreenCutout; 40 | private SerializedProperty autoFocusOnCommandInputField; 41 | 42 | private readonly GUIContent popupVisibilityLogFilterLabel = new GUIContent( "Log Filter", "Determines which log types will show the popup on screen" ); 43 | private readonly GUIContent receivedLogTypesLabel = new GUIContent( "Received Log Types", "Only these logs will be received by the console window, other logs will simply be skipped" ); 44 | private readonly GUIContent receiveInfoLogsLabel = new GUIContent( "Info" ); 45 | private readonly GUIContent receiveWarningLogsLabel = new GUIContent( "Warning" ); 46 | private readonly GUIContent receiveErrorLogsLabel = new GUIContent( "Error" ); 47 | private readonly GUIContent receiveExceptionLogsLabel = new GUIContent( "Exception" ); 48 | 49 | private void OnEnable() 50 | { 51 | singleton = serializedObject.FindProperty( "singleton" ); 52 | minimumHeight = serializedObject.FindProperty( "minimumHeight" ); 53 | enableHorizontalResizing = serializedObject.FindProperty( "enableHorizontalResizing" ); 54 | resizeFromRight = serializedObject.FindProperty( "resizeFromRight" ); 55 | minimumWidth = serializedObject.FindProperty( "minimumWidth" ); 56 | logWindowOpacity = serializedObject.FindProperty( "logWindowOpacity" ); 57 | popupOpacity = serializedObject.FindProperty( "popupOpacity" ); 58 | popupVisibility = serializedObject.FindProperty( "popupVisibility" ); 59 | popupVisibilityLogFilter = serializedObject.FindProperty( "popupVisibilityLogFilter" ); 60 | startMinimized = serializedObject.FindProperty( "startMinimized" ); 61 | toggleWithKey = serializedObject.FindProperty( "toggleWithKey" ); 62 | #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER 63 | toggleKey = serializedObject.FindProperty( "toggleBinding" ); 64 | #else 65 | toggleKey = serializedObject.FindProperty( "toggleKey" ); 66 | #endif 67 | enableSearchbar = serializedObject.FindProperty( "enableSearchbar" ); 68 | topSearchbarMinWidth = serializedObject.FindProperty( "topSearchbarMinWidth" ); 69 | receiveLogsWhileInactive = serializedObject.FindProperty( "receiveLogsWhileInactive" ); 70 | receiveInfoLogs = serializedObject.FindProperty( "receiveInfoLogs" ); 71 | receiveWarningLogs = serializedObject.FindProperty( "receiveWarningLogs" ); 72 | receiveErrorLogs = serializedObject.FindProperty( "receiveErrorLogs" ); 73 | receiveExceptionLogs = serializedObject.FindProperty( "receiveExceptionLogs" ); 74 | captureLogTimestamps = serializedObject.FindProperty( "captureLogTimestamps" ); 75 | alwaysDisplayTimestamps = serializedObject.FindProperty( "alwaysDisplayTimestamps" ); 76 | maxLogCount = serializedObject.FindProperty( "maxLogCount" ); 77 | logsToRemoveAfterMaxLogCount = serializedObject.FindProperty( "logsToRemoveAfterMaxLogCount" ); 78 | queuedLogLimit = serializedObject.FindProperty( "queuedLogLimit" ); 79 | clearCommandAfterExecution = serializedObject.FindProperty( "clearCommandAfterExecution" ); 80 | commandHistorySize = serializedObject.FindProperty( "commandHistorySize" ); 81 | showCommandSuggestions = serializedObject.FindProperty( "showCommandSuggestions" ); 82 | receiveLogcatLogsInAndroid = serializedObject.FindProperty( "receiveLogcatLogsInAndroid" ); 83 | logcatArguments = serializedObject.FindProperty( "logcatArguments" ); 84 | avoidScreenCutout = serializedObject.FindProperty( "avoidScreenCutout" ); 85 | popupAvoidsScreenCutout = serializedObject.FindProperty( "popupAvoidsScreenCutout" ); 86 | autoFocusOnCommandInputField = serializedObject.FindProperty( "autoFocusOnCommandInputField" ); 87 | } 88 | 89 | public override void OnInspectorGUI() 90 | { 91 | serializedObject.Update(); 92 | 93 | EditorGUILayout.PropertyField( singleton ); 94 | 95 | EditorGUILayout.Space(); 96 | 97 | EditorGUILayout.PropertyField( minimumHeight ); 98 | 99 | EditorGUILayout.PropertyField( enableHorizontalResizing ); 100 | if( enableHorizontalResizing.boolValue ) 101 | { 102 | DrawSubProperty( resizeFromRight ); 103 | DrawSubProperty( minimumWidth ); 104 | } 105 | 106 | EditorGUILayout.PropertyField( avoidScreenCutout ); 107 | DrawSubProperty( popupAvoidsScreenCutout ); 108 | 109 | EditorGUILayout.Space(); 110 | 111 | EditorGUILayout.PropertyField( startMinimized ); 112 | EditorGUILayout.PropertyField( logWindowOpacity ); 113 | EditorGUILayout.PropertyField( popupOpacity ); 114 | 115 | EditorGUILayout.PropertyField( popupVisibility ); 116 | if( popupVisibility.intValue == (int) PopupVisibility.WhenLogReceived ) 117 | { 118 | EditorGUI.indentLevel++; 119 | Rect rect = EditorGUILayout.GetControlRect(); 120 | EditorGUI.BeginProperty( rect, GUIContent.none, popupVisibilityLogFilter ); 121 | popupVisibilityLogFilter.intValue = (int) (DebugLogFilter) EditorGUI.EnumFlagsField( rect, popupVisibilityLogFilterLabel, (DebugLogFilter) popupVisibilityLogFilter.intValue ); 122 | EditorGUI.EndProperty(); 123 | EditorGUI.indentLevel--; 124 | } 125 | 126 | EditorGUILayout.PropertyField( toggleWithKey ); 127 | if( toggleWithKey.boolValue ) 128 | DrawSubProperty( toggleKey ); 129 | 130 | EditorGUILayout.Space(); 131 | 132 | EditorGUILayout.PropertyField( enableSearchbar ); 133 | if( enableSearchbar.boolValue ) 134 | DrawSubProperty( topSearchbarMinWidth ); 135 | 136 | EditorGUILayout.Space(); 137 | 138 | EditorGUILayout.PropertyField( receiveLogsWhileInactive ); 139 | 140 | EditorGUILayout.PrefixLabel( receivedLogTypesLabel ); 141 | EditorGUI.indentLevel++; 142 | EditorGUILayout.PropertyField( receiveInfoLogs, receiveInfoLogsLabel ); 143 | EditorGUILayout.PropertyField( receiveWarningLogs, receiveWarningLogsLabel ); 144 | EditorGUILayout.PropertyField( receiveErrorLogs, receiveErrorLogsLabel ); 145 | EditorGUILayout.PropertyField( receiveExceptionLogs, receiveExceptionLogsLabel ); 146 | EditorGUI.indentLevel--; 147 | 148 | EditorGUILayout.PropertyField( receiveLogcatLogsInAndroid ); 149 | if( receiveLogcatLogsInAndroid.boolValue ) 150 | DrawSubProperty( logcatArguments ); 151 | 152 | EditorGUILayout.PropertyField( captureLogTimestamps ); 153 | if( captureLogTimestamps.boolValue ) 154 | DrawSubProperty( alwaysDisplayTimestamps ); 155 | 156 | EditorGUILayout.PropertyField( maxLogCount ); 157 | DrawSubProperty( logsToRemoveAfterMaxLogCount ); 158 | 159 | EditorGUILayout.PropertyField( queuedLogLimit ); 160 | 161 | EditorGUILayout.Space(); 162 | 163 | EditorGUILayout.PropertyField( clearCommandAfterExecution ); 164 | EditorGUILayout.PropertyField( commandHistorySize ); 165 | EditorGUILayout.PropertyField( showCommandSuggestions ); 166 | EditorGUILayout.PropertyField( autoFocusOnCommandInputField ); 167 | 168 | EditorGUILayout.Space(); 169 | 170 | DrawPropertiesExcluding( serializedObject, "m_Script" ); 171 | serializedObject.ApplyModifiedProperties(); 172 | } 173 | 174 | private void DrawSubProperty( SerializedProperty property ) 175 | { 176 | EditorGUI.indentLevel++; 177 | EditorGUILayout.PropertyField( property ); 178 | EditorGUI.indentLevel--; 179 | } 180 | } 181 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4c23e5c521cb0c54b9a638b2a653d1d3 3 | timeCreated: 1561217671 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "IngameDebugConsole.Editor", 3 | "references": [ 4 | "IngameDebugConsole.Runtime" 5 | ], 6 | "includePlatforms": [ 7 | "Editor" 8 | ], 9 | "excludePlatforms": [], 10 | "allowUnsafeCode": false, 11 | "overrideReferences": false, 12 | "precompiledReferences": [], 13 | "autoReferenced": true, 14 | "defineConstraints": [], 15 | "versionDefines": [], 16 | "noEngineReferences": false 17 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 466e67dabd1db22468246c39eddb6c3f 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "IngameDebugConsole.Runtime", 3 | "rootNamespace": "", 4 | "references": [ 5 | "Unity.InputSystem", 6 | "Unity.TextMeshPro" 7 | ], 8 | "includePlatforms": [], 9 | "excludePlatforms": [], 10 | "allowUnsafeCode": false, 11 | "overrideReferences": false, 12 | "precompiledReferences": [], 13 | "autoReferenced": true, 14 | "defineConstraints": [], 15 | "versionDefines": [ 16 | { 17 | "name": "com.unity.modules.androidjni", 18 | "expression": "", 19 | "define": "UNITY_ANDROID_JNI" 20 | } 21 | ], 22 | "noEngineReferences": false 23 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3de88c88fbbb8f944b9210d496af9762 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/IngameDebugConsole.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 67117722a812a2e46ab8cb8eafbf5f5e 3 | timeCreated: 1466014755 4 | licenseType: Free 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7dbc36665bc0d684db9a4447e27a7a4b 3 | folderAsset: yes 4 | timeCreated: 1520417401 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &1386426139070838 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 224955737853170496} 12 | - component: {fileID: 222541766812100524} 13 | - component: {fileID: 6838696818539158795} 14 | m_Layer: 5 15 | m_Name: CommandSuggestion 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 1 21 | --- !u!224 &224955737853170496 22 | RectTransform: 23 | m_ObjectHideFlags: 0 24 | m_CorrespondingSourceObject: {fileID: 0} 25 | m_PrefabInstance: {fileID: 0} 26 | m_PrefabAsset: {fileID: 0} 27 | m_GameObject: {fileID: 1386426139070838} 28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 29 | m_LocalPosition: {x: 0, y: 0, z: 0} 30 | m_LocalScale: {x: 1, y: 1, z: 1} 31 | m_ConstrainProportionsScale: 0 32 | m_Children: [] 33 | m_Father: {fileID: 0} 34 | m_RootOrder: 0 35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 36 | m_AnchorMin: {x: 0, y: 0} 37 | m_AnchorMax: {x: 0, y: 0} 38 | m_AnchoredPosition: {x: 0, y: 0} 39 | m_SizeDelta: {x: 0, y: 0} 40 | m_Pivot: {x: 0.5, y: 0.5} 41 | --- !u!222 &222541766812100524 42 | CanvasRenderer: 43 | m_ObjectHideFlags: 0 44 | m_CorrespondingSourceObject: {fileID: 0} 45 | m_PrefabInstance: {fileID: 0} 46 | m_PrefabAsset: {fileID: 0} 47 | m_GameObject: {fileID: 1386426139070838} 48 | m_CullTransparentMesh: 1 49 | --- !u!114 &6838696818539158795 50 | MonoBehaviour: 51 | m_ObjectHideFlags: 0 52 | m_CorrespondingSourceObject: {fileID: 0} 53 | m_PrefabInstance: {fileID: 0} 54 | m_PrefabAsset: {fileID: 0} 55 | m_GameObject: {fileID: 1386426139070838} 56 | m_Enabled: 1 57 | m_EditorHideFlags: 0 58 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} 59 | m_Name: 60 | m_EditorClassIdentifier: 61 | m_Material: {fileID: 0} 62 | m_Color: {r: 1, g: 1, b: 1, a: 1} 63 | m_RaycastTarget: 0 64 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 65 | m_Maskable: 1 66 | m_OnCullStateChanged: 67 | m_PersistentCalls: 68 | m_Calls: [] 69 | m_text: help 70 | m_isRightToLeft: 0 71 | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} 72 | m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} 73 | m_fontSharedMaterials: [] 74 | m_fontMaterial: {fileID: 0} 75 | m_fontMaterials: [] 76 | m_fontColor32: 77 | serializedVersion: 2 78 | rgba: 4292335574 79 | m_fontColor: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} 80 | m_enableVertexGradient: 0 81 | m_colorMode: 3 82 | m_fontColorGradient: 83 | topLeft: {r: 1, g: 1, b: 1, a: 1} 84 | topRight: {r: 1, g: 1, b: 1, a: 1} 85 | bottomLeft: {r: 1, g: 1, b: 1, a: 1} 86 | bottomRight: {r: 1, g: 1, b: 1, a: 1} 87 | m_fontColorGradientPreset: {fileID: 0} 88 | m_spriteAsset: {fileID: 0} 89 | m_tintAllSprites: 0 90 | m_StyleSheet: {fileID: 0} 91 | m_TextStyleHashCode: -1183493901 92 | m_overrideHtmlColors: 0 93 | m_faceColor: 94 | serializedVersion: 2 95 | rgba: 4294967295 96 | m_fontSize: 16 97 | m_fontSizeBase: 16 98 | m_fontWeight: 400 99 | m_enableAutoSizing: 0 100 | m_fontSizeMin: 1 101 | m_fontSizeMax: 40 102 | m_fontStyle: 0 103 | m_HorizontalAlignment: 1 104 | m_VerticalAlignment: 512 105 | m_textAlignment: 65535 106 | m_characterSpacing: 0 107 | m_wordSpacing: 0 108 | m_lineSpacing: 0 109 | m_lineSpacingMax: 0 110 | m_paragraphSpacing: 0 111 | m_charWidthMaxAdj: 0 112 | m_enableWordWrapping: 1 113 | m_wordWrappingRatios: 0.4 114 | m_overflowMode: 3 115 | m_linkedTextComponent: {fileID: 0} 116 | parentLinkedComponent: {fileID: 0} 117 | m_enableKerning: 1 118 | m_enableExtraPadding: 0 119 | checkPaddingRequired: 0 120 | m_isRichText: 1 121 | m_parseCtrlCharacters: 0 122 | m_isOrthographic: 1 123 | m_isCullingEnabled: 0 124 | m_horizontalMapping: 0 125 | m_verticalMapping: 0 126 | m_uvLineOffset: 0 127 | m_geometrySortingOrder: 0 128 | m_IsTextObjectScaleStatic: 0 129 | m_VertexBufferAutoSizeReduction: 0 130 | m_useMaxVisibleDescender: 1 131 | m_pageToDisplay: 1 132 | m_margin: {x: 0, y: 0, z: 0, w: 0} 133 | m_isUsingLegacyAnimationComponent: 0 134 | m_isVolumetricText: 0 135 | m_hasFontAssetChanged: 0 136 | m_baseMaterial: {fileID: 0} 137 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0} 138 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e66896448428cf46a1854dbdc014914 3 | timeCreated: 1601390136 4 | licenseType: Free 5 | NativeFormatImporter: 6 | mainObjectFileID: 100100000 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &104862 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 22461494} 12 | - component: {fileID: 22233942} 13 | - component: {fileID: 11411806} 14 | m_Layer: 5 15 | m_Name: LogCount 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 0 21 | --- !u!224 &22461494 22 | RectTransform: 23 | m_ObjectHideFlags: 0 24 | m_CorrespondingSourceObject: {fileID: 0} 25 | m_PrefabInstance: {fileID: 0} 26 | m_PrefabAsset: {fileID: 0} 27 | m_GameObject: {fileID: 104862} 28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 29 | m_LocalPosition: {x: 0, y: 0, z: 0} 30 | m_LocalScale: {x: 1, y: 1, z: 1} 31 | m_ConstrainProportionsScale: 0 32 | m_Children: 33 | - {fileID: 22420350} 34 | m_Father: {fileID: 22479264} 35 | m_RootOrder: 2 36 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 37 | m_AnchorMin: {x: 1, y: 0.5} 38 | m_AnchorMax: {x: 1, y: 0.5} 39 | m_AnchoredPosition: {x: -20, y: 0} 40 | m_SizeDelta: {x: 30, y: 25} 41 | m_Pivot: {x: 0.5, y: 0.5} 42 | --- !u!222 &22233942 43 | CanvasRenderer: 44 | m_ObjectHideFlags: 0 45 | m_CorrespondingSourceObject: {fileID: 0} 46 | m_PrefabInstance: {fileID: 0} 47 | m_PrefabAsset: {fileID: 0} 48 | m_GameObject: {fileID: 104862} 49 | m_CullTransparentMesh: 1 50 | --- !u!114 &11411806 51 | MonoBehaviour: 52 | m_ObjectHideFlags: 0 53 | m_CorrespondingSourceObject: {fileID: 0} 54 | m_PrefabInstance: {fileID: 0} 55 | m_PrefabAsset: {fileID: 0} 56 | m_GameObject: {fileID: 104862} 57 | m_Enabled: 1 58 | m_EditorHideFlags: 0 59 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 60 | m_Name: 61 | m_EditorClassIdentifier: 62 | m_Material: {fileID: 0} 63 | m_Color: {r: 0.42647058, g: 0.42647058, b: 0.42647058, a: 1} 64 | m_RaycastTarget: 0 65 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 66 | m_Maskable: 1 67 | m_OnCullStateChanged: 68 | m_PersistentCalls: 69 | m_Calls: [] 70 | m_Sprite: {fileID: 21300000, guid: b3f0d976f6d6802479d6465d11b3aa68, type: 3} 71 | m_Type: 1 72 | m_PreserveAspect: 0 73 | m_FillCenter: 1 74 | m_FillMethod: 4 75 | m_FillAmount: 1 76 | m_FillClockwise: 1 77 | m_FillOrigin: 0 78 | m_UseSpriteMesh: 0 79 | m_PixelsPerUnitMultiplier: 1.3 80 | --- !u!1 &151462 81 | GameObject: 82 | m_ObjectHideFlags: 0 83 | m_CorrespondingSourceObject: {fileID: 0} 84 | m_PrefabInstance: {fileID: 0} 85 | m_PrefabAsset: {fileID: 0} 86 | serializedVersion: 6 87 | m_Component: 88 | - component: {fileID: 22420350} 89 | - component: {fileID: 22200920} 90 | - component: {fileID: 5450305048240168820} 91 | m_Layer: 5 92 | m_Name: LogCountText 93 | m_TagString: Untagged 94 | m_Icon: {fileID: 0} 95 | m_NavMeshLayer: 0 96 | m_StaticEditorFlags: 0 97 | m_IsActive: 1 98 | --- !u!224 &22420350 99 | RectTransform: 100 | m_ObjectHideFlags: 0 101 | m_CorrespondingSourceObject: {fileID: 0} 102 | m_PrefabInstance: {fileID: 0} 103 | m_PrefabAsset: {fileID: 0} 104 | m_GameObject: {fileID: 151462} 105 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 106 | m_LocalPosition: {x: 0, y: 0, z: 0} 107 | m_LocalScale: {x: 1, y: 1, z: 1} 108 | m_ConstrainProportionsScale: 0 109 | m_Children: [] 110 | m_Father: {fileID: 22461494} 111 | m_RootOrder: 0 112 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 113 | m_AnchorMin: {x: 0, y: 0} 114 | m_AnchorMax: {x: 1, y: 1} 115 | m_AnchoredPosition: {x: 0, y: 0} 116 | m_SizeDelta: {x: -2, y: 0} 117 | m_Pivot: {x: 0.5, y: 0.5} 118 | --- !u!222 &22200920 119 | CanvasRenderer: 120 | m_ObjectHideFlags: 0 121 | m_CorrespondingSourceObject: {fileID: 0} 122 | m_PrefabInstance: {fileID: 0} 123 | m_PrefabAsset: {fileID: 0} 124 | m_GameObject: {fileID: 151462} 125 | m_CullTransparentMesh: 1 126 | --- !u!114 &5450305048240168820 127 | MonoBehaviour: 128 | m_ObjectHideFlags: 0 129 | m_CorrespondingSourceObject: {fileID: 0} 130 | m_PrefabInstance: {fileID: 0} 131 | m_PrefabAsset: {fileID: 0} 132 | m_GameObject: {fileID: 151462} 133 | m_Enabled: 1 134 | m_EditorHideFlags: 0 135 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} 136 | m_Name: 137 | m_EditorClassIdentifier: 138 | m_Material: {fileID: 0} 139 | m_Color: {r: 1, g: 1, b: 1, a: 1} 140 | m_RaycastTarget: 0 141 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 142 | m_Maskable: 1 143 | m_OnCullStateChanged: 144 | m_PersistentCalls: 145 | m_Calls: [] 146 | m_text: 1 147 | m_isRightToLeft: 0 148 | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} 149 | m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} 150 | m_fontSharedMaterials: [] 151 | m_fontMaterial: {fileID: 0} 152 | m_fontMaterials: [] 153 | m_fontColor32: 154 | serializedVersion: 2 155 | rgba: 4292335574 156 | m_fontColor: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} 157 | m_enableVertexGradient: 0 158 | m_colorMode: 3 159 | m_fontColorGradient: 160 | topLeft: {r: 1, g: 1, b: 1, a: 1} 161 | topRight: {r: 1, g: 1, b: 1, a: 1} 162 | bottomLeft: {r: 1, g: 1, b: 1, a: 1} 163 | bottomRight: {r: 1, g: 1, b: 1, a: 1} 164 | m_fontColorGradientPreset: {fileID: 0} 165 | m_spriteAsset: {fileID: 0} 166 | m_tintAllSprites: 0 167 | m_StyleSheet: {fileID: 0} 168 | m_TextStyleHashCode: -1183493901 169 | m_overrideHtmlColors: 0 170 | m_faceColor: 171 | serializedVersion: 2 172 | rgba: 4294967295 173 | m_fontSize: 14 174 | m_fontSizeBase: 36 175 | m_fontWeight: 400 176 | m_enableAutoSizing: 1 177 | m_fontSizeMin: 8 178 | m_fontSizeMax: 14 179 | m_fontStyle: 0 180 | m_HorizontalAlignment: 2 181 | m_VerticalAlignment: 512 182 | m_textAlignment: 65535 183 | m_characterSpacing: 0 184 | m_wordSpacing: 0 185 | m_lineSpacing: 0 186 | m_lineSpacingMax: 0 187 | m_paragraphSpacing: 0 188 | m_charWidthMaxAdj: 0 189 | m_enableWordWrapping: 1 190 | m_wordWrappingRatios: 0.4 191 | m_overflowMode: 0 192 | m_linkedTextComponent: {fileID: 0} 193 | parentLinkedComponent: {fileID: 0} 194 | m_enableKerning: 0 195 | m_enableExtraPadding: 0 196 | checkPaddingRequired: 0 197 | m_isRichText: 1 198 | m_parseCtrlCharacters: 0 199 | m_isOrthographic: 1 200 | m_isCullingEnabled: 0 201 | m_horizontalMapping: 0 202 | m_verticalMapping: 0 203 | m_uvLineOffset: 0 204 | m_geometrySortingOrder: 0 205 | m_IsTextObjectScaleStatic: 0 206 | m_VertexBufferAutoSizeReduction: 0 207 | m_useMaxVisibleDescender: 1 208 | m_pageToDisplay: 1 209 | m_margin: {x: 0, y: 0, z: 0, w: 0} 210 | m_isUsingLegacyAnimationComponent: 0 211 | m_isVolumetricText: 0 212 | m_hasFontAssetChanged: 0 213 | m_baseMaterial: {fileID: 0} 214 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0} 215 | --- !u!1 &152362 216 | GameObject: 217 | m_ObjectHideFlags: 0 218 | m_CorrespondingSourceObject: {fileID: 0} 219 | m_PrefabInstance: {fileID: 0} 220 | m_PrefabAsset: {fileID: 0} 221 | serializedVersion: 6 222 | m_Component: 223 | - component: {fileID: 22427300} 224 | - component: {fileID: 22262284} 225 | - component: {fileID: 11404142} 226 | m_Layer: 5 227 | m_Name: LogType 228 | m_TagString: Untagged 229 | m_Icon: {fileID: 0} 230 | m_NavMeshLayer: 0 231 | m_StaticEditorFlags: 0 232 | m_IsActive: 1 233 | --- !u!224 &22427300 234 | RectTransform: 235 | m_ObjectHideFlags: 0 236 | m_CorrespondingSourceObject: {fileID: 0} 237 | m_PrefabInstance: {fileID: 0} 238 | m_PrefabAsset: {fileID: 0} 239 | m_GameObject: {fileID: 152362} 240 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 241 | m_LocalPosition: {x: 0, y: 0, z: 0} 242 | m_LocalScale: {x: 1, y: 1, z: 1} 243 | m_ConstrainProportionsScale: 0 244 | m_Children: [] 245 | m_Father: {fileID: 22479264} 246 | m_RootOrder: 0 247 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 248 | m_AnchorMin: {x: 0, y: 0.5} 249 | m_AnchorMax: {x: 0, y: 0.5} 250 | m_AnchoredPosition: {x: 15, y: 0} 251 | m_SizeDelta: {x: 25, y: 25} 252 | m_Pivot: {x: 0.5, y: 0.5} 253 | --- !u!222 &22262284 254 | CanvasRenderer: 255 | m_ObjectHideFlags: 0 256 | m_CorrespondingSourceObject: {fileID: 0} 257 | m_PrefabInstance: {fileID: 0} 258 | m_PrefabAsset: {fileID: 0} 259 | m_GameObject: {fileID: 152362} 260 | m_CullTransparentMesh: 1 261 | --- !u!114 &11404142 262 | MonoBehaviour: 263 | m_ObjectHideFlags: 0 264 | m_CorrespondingSourceObject: {fileID: 0} 265 | m_PrefabInstance: {fileID: 0} 266 | m_PrefabAsset: {fileID: 0} 267 | m_GameObject: {fileID: 152362} 268 | m_Enabled: 1 269 | m_EditorHideFlags: 0 270 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 271 | m_Name: 272 | m_EditorClassIdentifier: 273 | m_Material: {fileID: 0} 274 | m_Color: {r: 1, g: 1, b: 1, a: 1} 275 | m_RaycastTarget: 0 276 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 277 | m_Maskable: 1 278 | m_OnCullStateChanged: 279 | m_PersistentCalls: 280 | m_Calls: [] 281 | m_Sprite: {fileID: 21300000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3} 282 | m_Type: 0 283 | m_PreserveAspect: 0 284 | m_FillCenter: 1 285 | m_FillMethod: 4 286 | m_FillAmount: 1 287 | m_FillClockwise: 1 288 | m_FillOrigin: 0 289 | m_UseSpriteMesh: 0 290 | m_PixelsPerUnitMultiplier: 1 291 | --- !u!1 &166880 292 | GameObject: 293 | m_ObjectHideFlags: 0 294 | m_CorrespondingSourceObject: {fileID: 0} 295 | m_PrefabInstance: {fileID: 0} 296 | m_PrefabAsset: {fileID: 0} 297 | serializedVersion: 6 298 | m_Component: 299 | - component: {fileID: 22479264} 300 | - component: {fileID: 22288988} 301 | - component: {fileID: 11459012} 302 | - component: {fileID: 11408050} 303 | - component: {fileID: 11456372} 304 | - component: {fileID: 225819852034701160} 305 | m_Layer: 5 306 | m_Name: DebugLogItem 307 | m_TagString: Untagged 308 | m_Icon: {fileID: 0} 309 | m_NavMeshLayer: 0 310 | m_StaticEditorFlags: 0 311 | m_IsActive: 1 312 | --- !u!224 &22479264 313 | RectTransform: 314 | m_ObjectHideFlags: 0 315 | m_CorrespondingSourceObject: {fileID: 0} 316 | m_PrefabInstance: {fileID: 0} 317 | m_PrefabAsset: {fileID: 0} 318 | m_GameObject: {fileID: 166880} 319 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 320 | m_LocalPosition: {x: 0, y: 0, z: 0} 321 | m_LocalScale: {x: 1, y: 1, z: 1} 322 | m_ConstrainProportionsScale: 0 323 | m_Children: 324 | - {fileID: 22427300} 325 | - {fileID: 224737693311518052} 326 | - {fileID: 22461494} 327 | - {fileID: 224006190298411330} 328 | m_Father: {fileID: 0} 329 | m_RootOrder: 0 330 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 331 | m_AnchorMin: {x: 0, y: 1} 332 | m_AnchorMax: {x: 1, y: 1} 333 | m_AnchoredPosition: {x: 0, y: 0} 334 | m_SizeDelta: {x: 0, y: 35} 335 | m_Pivot: {x: 0, y: 1} 336 | --- !u!222 &22288988 337 | CanvasRenderer: 338 | m_ObjectHideFlags: 0 339 | m_CorrespondingSourceObject: {fileID: 0} 340 | m_PrefabInstance: {fileID: 0} 341 | m_PrefabAsset: {fileID: 0} 342 | m_GameObject: {fileID: 166880} 343 | m_CullTransparentMesh: 1 344 | --- !u!114 &11459012 345 | MonoBehaviour: 346 | m_ObjectHideFlags: 0 347 | m_CorrespondingSourceObject: {fileID: 0} 348 | m_PrefabInstance: {fileID: 0} 349 | m_PrefabAsset: {fileID: 0} 350 | m_GameObject: {fileID: 166880} 351 | m_Enabled: 1 352 | m_EditorHideFlags: 0 353 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 354 | m_Name: 355 | m_EditorClassIdentifier: 356 | m_Material: {fileID: 0} 357 | m_Color: {r: 0.23529412, g: 0.23529412, b: 0.23529412, a: 0.697} 358 | m_RaycastTarget: 1 359 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 360 | m_Maskable: 1 361 | m_OnCullStateChanged: 362 | m_PersistentCalls: 363 | m_Calls: [] 364 | m_Sprite: {fileID: 21300000, guid: 98e8e1cf8dc7dbf469617c2e40c8a944, type: 3} 365 | m_Type: 1 366 | m_PreserveAspect: 0 367 | m_FillCenter: 1 368 | m_FillMethod: 4 369 | m_FillAmount: 1 370 | m_FillClockwise: 1 371 | m_FillOrigin: 0 372 | m_UseSpriteMesh: 0 373 | m_PixelsPerUnitMultiplier: 1 374 | --- !u!114 &11408050 375 | MonoBehaviour: 376 | m_ObjectHideFlags: 0 377 | m_CorrespondingSourceObject: {fileID: 0} 378 | m_PrefabInstance: {fileID: 0} 379 | m_PrefabAsset: {fileID: 0} 380 | m_GameObject: {fileID: 166880} 381 | m_Enabled: 1 382 | m_EditorHideFlags: 0 383 | m_Script: {fileID: 11500000, guid: d2ea291be9de70a4abfec595203c96c1, type: 3} 384 | m_Name: 385 | m_EditorClassIdentifier: 386 | transformComponent: {fileID: 22479264} 387 | imageComponent: {fileID: 11459012} 388 | canvasGroupComponent: {fileID: 225819852034701160} 389 | logText: {fileID: 3887244321031527211} 390 | logTypeImage: {fileID: 11404142} 391 | logCountParent: {fileID: 104862} 392 | logCountText: {fileID: 5450305048240168820} 393 | copyLogButton: {fileID: 114694923173451186} 394 | --- !u!114 &11456372 395 | MonoBehaviour: 396 | m_ObjectHideFlags: 0 397 | m_CorrespondingSourceObject: {fileID: 0} 398 | m_PrefabInstance: {fileID: 0} 399 | m_PrefabAsset: {fileID: 0} 400 | m_GameObject: {fileID: 166880} 401 | m_Enabled: 1 402 | m_EditorHideFlags: 0 403 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 404 | m_Name: 405 | m_EditorClassIdentifier: 406 | m_Navigation: 407 | m_Mode: 3 408 | m_WrapAround: 0 409 | m_SelectOnUp: {fileID: 0} 410 | m_SelectOnDown: {fileID: 0} 411 | m_SelectOnLeft: {fileID: 0} 412 | m_SelectOnRight: {fileID: 0} 413 | m_Transition: 1 414 | m_Colors: 415 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 416 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 417 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 418 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 419 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 420 | m_ColorMultiplier: 1 421 | m_FadeDuration: 0.1 422 | m_SpriteState: 423 | m_HighlightedSprite: {fileID: 0} 424 | m_PressedSprite: {fileID: 0} 425 | m_SelectedSprite: {fileID: 0} 426 | m_DisabledSprite: {fileID: 0} 427 | m_AnimationTriggers: 428 | m_NormalTrigger: Normal 429 | m_HighlightedTrigger: Highlighted 430 | m_PressedTrigger: Pressed 431 | m_SelectedTrigger: Highlighted 432 | m_DisabledTrigger: Disabled 433 | m_Interactable: 1 434 | m_TargetGraphic: {fileID: 11459012} 435 | m_OnClick: 436 | m_PersistentCalls: 437 | m_Calls: [] 438 | --- !u!225 &225819852034701160 439 | CanvasGroup: 440 | m_ObjectHideFlags: 0 441 | m_CorrespondingSourceObject: {fileID: 0} 442 | m_PrefabInstance: {fileID: 0} 443 | m_PrefabAsset: {fileID: 0} 444 | m_GameObject: {fileID: 166880} 445 | m_Enabled: 1 446 | m_Alpha: 1 447 | m_Interactable: 1 448 | m_BlocksRaycasts: 1 449 | m_IgnoreParentGroups: 0 450 | --- !u!1 &1396836967994216 451 | GameObject: 452 | m_ObjectHideFlags: 0 453 | m_CorrespondingSourceObject: {fileID: 0} 454 | m_PrefabInstance: {fileID: 0} 455 | m_PrefabAsset: {fileID: 0} 456 | serializedVersion: 6 457 | m_Component: 458 | - component: {fileID: 224006190298411330} 459 | - component: {fileID: 222870443111501910} 460 | - component: {fileID: 114119781176956926} 461 | - component: {fileID: 114694923173451186} 462 | m_Layer: 5 463 | m_Name: CopyLogButton 464 | m_TagString: Untagged 465 | m_Icon: {fileID: 0} 466 | m_NavMeshLayer: 0 467 | m_StaticEditorFlags: 0 468 | m_IsActive: 0 469 | --- !u!224 &224006190298411330 470 | RectTransform: 471 | m_ObjectHideFlags: 0 472 | m_CorrespondingSourceObject: {fileID: 0} 473 | m_PrefabInstance: {fileID: 0} 474 | m_PrefabAsset: {fileID: 0} 475 | m_GameObject: {fileID: 1396836967994216} 476 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 477 | m_LocalPosition: {x: 0, y: 0, z: 0} 478 | m_LocalScale: {x: 1, y: 1, z: 1} 479 | m_ConstrainProportionsScale: 0 480 | m_Children: 481 | - {fileID: 224887990600088790} 482 | m_Father: {fileID: 22479264} 483 | m_RootOrder: 3 484 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 485 | m_AnchorMin: {x: 0, y: 0} 486 | m_AnchorMax: {x: 1, y: 0} 487 | m_AnchoredPosition: {x: 0, y: 2} 488 | m_SizeDelta: {x: -80, y: 36} 489 | m_Pivot: {x: 0.5, y: 0} 490 | --- !u!222 &222870443111501910 491 | CanvasRenderer: 492 | m_ObjectHideFlags: 0 493 | m_CorrespondingSourceObject: {fileID: 0} 494 | m_PrefabInstance: {fileID: 0} 495 | m_PrefabAsset: {fileID: 0} 496 | m_GameObject: {fileID: 1396836967994216} 497 | m_CullTransparentMesh: 1 498 | --- !u!114 &114119781176956926 499 | MonoBehaviour: 500 | m_ObjectHideFlags: 0 501 | m_CorrespondingSourceObject: {fileID: 0} 502 | m_PrefabInstance: {fileID: 0} 503 | m_PrefabAsset: {fileID: 0} 504 | m_GameObject: {fileID: 1396836967994216} 505 | m_Enabled: 1 506 | m_EditorHideFlags: 0 507 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 508 | m_Name: 509 | m_EditorClassIdentifier: 510 | m_Material: {fileID: 0} 511 | m_Color: {r: 0.42647058, g: 0.42647058, b: 0.42647058, a: 1} 512 | m_RaycastTarget: 1 513 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 514 | m_Maskable: 1 515 | m_OnCullStateChanged: 516 | m_PersistentCalls: 517 | m_Calls: [] 518 | m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} 519 | m_Type: 1 520 | m_PreserveAspect: 0 521 | m_FillCenter: 1 522 | m_FillMethod: 4 523 | m_FillAmount: 1 524 | m_FillClockwise: 1 525 | m_FillOrigin: 0 526 | m_UseSpriteMesh: 0 527 | m_PixelsPerUnitMultiplier: 1 528 | --- !u!114 &114694923173451186 529 | MonoBehaviour: 530 | m_ObjectHideFlags: 0 531 | m_CorrespondingSourceObject: {fileID: 0} 532 | m_PrefabInstance: {fileID: 0} 533 | m_PrefabAsset: {fileID: 0} 534 | m_GameObject: {fileID: 1396836967994216} 535 | m_Enabled: 1 536 | m_EditorHideFlags: 0 537 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 538 | m_Name: 539 | m_EditorClassIdentifier: 540 | m_Navigation: 541 | m_Mode: 3 542 | m_WrapAround: 0 543 | m_SelectOnUp: {fileID: 0} 544 | m_SelectOnDown: {fileID: 0} 545 | m_SelectOnLeft: {fileID: 0} 546 | m_SelectOnRight: {fileID: 0} 547 | m_Transition: 1 548 | m_Colors: 549 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 550 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 551 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 552 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 553 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 554 | m_ColorMultiplier: 1 555 | m_FadeDuration: 0.1 556 | m_SpriteState: 557 | m_HighlightedSprite: {fileID: 0} 558 | m_PressedSprite: {fileID: 0} 559 | m_SelectedSprite: {fileID: 0} 560 | m_DisabledSprite: {fileID: 0} 561 | m_AnimationTriggers: 562 | m_NormalTrigger: Normal 563 | m_HighlightedTrigger: Highlighted 564 | m_PressedTrigger: Pressed 565 | m_SelectedTrigger: Highlighted 566 | m_DisabledTrigger: Disabled 567 | m_Interactable: 1 568 | m_TargetGraphic: {fileID: 114119781176956926} 569 | m_OnClick: 570 | m_PersistentCalls: 571 | m_Calls: [] 572 | --- !u!1 &1503640463151286 573 | GameObject: 574 | m_ObjectHideFlags: 0 575 | m_CorrespondingSourceObject: {fileID: 0} 576 | m_PrefabInstance: {fileID: 0} 577 | m_PrefabAsset: {fileID: 0} 578 | serializedVersion: 6 579 | m_Component: 580 | - component: {fileID: 224887990600088790} 581 | - component: {fileID: 222313182602304162} 582 | - component: {fileID: 6497267641603342931} 583 | m_Layer: 5 584 | m_Name: Text 585 | m_TagString: Untagged 586 | m_Icon: {fileID: 0} 587 | m_NavMeshLayer: 0 588 | m_StaticEditorFlags: 0 589 | m_IsActive: 1 590 | --- !u!224 &224887990600088790 591 | RectTransform: 592 | m_ObjectHideFlags: 0 593 | m_CorrespondingSourceObject: {fileID: 0} 594 | m_PrefabInstance: {fileID: 0} 595 | m_PrefabAsset: {fileID: 0} 596 | m_GameObject: {fileID: 1503640463151286} 597 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 598 | m_LocalPosition: {x: 0, y: 0, z: 0} 599 | m_LocalScale: {x: 1, y: 1, z: 1} 600 | m_ConstrainProportionsScale: 0 601 | m_Children: [] 602 | m_Father: {fileID: 224006190298411330} 603 | m_RootOrder: 0 604 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 605 | m_AnchorMin: {x: 0, y: 0} 606 | m_AnchorMax: {x: 1, y: 1} 607 | m_AnchoredPosition: {x: 0, y: 0} 608 | m_SizeDelta: {x: 0, y: 0} 609 | m_Pivot: {x: 0.5, y: 0.5} 610 | --- !u!222 &222313182602304162 611 | CanvasRenderer: 612 | m_ObjectHideFlags: 0 613 | m_CorrespondingSourceObject: {fileID: 0} 614 | m_PrefabInstance: {fileID: 0} 615 | m_PrefabAsset: {fileID: 0} 616 | m_GameObject: {fileID: 1503640463151286} 617 | m_CullTransparentMesh: 1 618 | --- !u!114 &6497267641603342931 619 | MonoBehaviour: 620 | m_ObjectHideFlags: 0 621 | m_CorrespondingSourceObject: {fileID: 0} 622 | m_PrefabInstance: {fileID: 0} 623 | m_PrefabAsset: {fileID: 0} 624 | m_GameObject: {fileID: 1503640463151286} 625 | m_Enabled: 1 626 | m_EditorHideFlags: 0 627 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} 628 | m_Name: 629 | m_EditorClassIdentifier: 630 | m_Material: {fileID: 0} 631 | m_Color: {r: 1, g: 1, b: 1, a: 1} 632 | m_RaycastTarget: 0 633 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 634 | m_Maskable: 1 635 | m_OnCullStateChanged: 636 | m_PersistentCalls: 637 | m_Calls: [] 638 | m_text: Copy 639 | m_isRightToLeft: 0 640 | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} 641 | m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} 642 | m_fontSharedMaterials: [] 643 | m_fontMaterial: {fileID: 0} 644 | m_fontMaterials: [] 645 | m_fontColor32: 646 | serializedVersion: 2 647 | rgba: 4292335574 648 | m_fontColor: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} 649 | m_enableVertexGradient: 0 650 | m_colorMode: 3 651 | m_fontColorGradient: 652 | topLeft: {r: 1, g: 1, b: 1, a: 1} 653 | topRight: {r: 1, g: 1, b: 1, a: 1} 654 | bottomLeft: {r: 1, g: 1, b: 1, a: 1} 655 | bottomRight: {r: 1, g: 1, b: 1, a: 1} 656 | m_fontColorGradientPreset: {fileID: 0} 657 | m_spriteAsset: {fileID: 0} 658 | m_tintAllSprites: 0 659 | m_StyleSheet: {fileID: 0} 660 | m_TextStyleHashCode: -1183493901 661 | m_overrideHtmlColors: 0 662 | m_faceColor: 663 | serializedVersion: 2 664 | rgba: 4294967295 665 | m_fontSize: 16 666 | m_fontSizeBase: 16 667 | m_fontWeight: 400 668 | m_enableAutoSizing: 0 669 | m_fontSizeMin: 1 670 | m_fontSizeMax: 40 671 | m_fontStyle: 0 672 | m_HorizontalAlignment: 2 673 | m_VerticalAlignment: 512 674 | m_textAlignment: 65535 675 | m_characterSpacing: 0 676 | m_wordSpacing: 0 677 | m_lineSpacing: 0 678 | m_lineSpacingMax: 0 679 | m_paragraphSpacing: 0 680 | m_charWidthMaxAdj: 0 681 | m_enableWordWrapping: 1 682 | m_wordWrappingRatios: 0.4 683 | m_overflowMode: 0 684 | m_linkedTextComponent: {fileID: 0} 685 | parentLinkedComponent: {fileID: 0} 686 | m_enableKerning: 0 687 | m_enableExtraPadding: 0 688 | checkPaddingRequired: 0 689 | m_isRichText: 1 690 | m_parseCtrlCharacters: 0 691 | m_isOrthographic: 1 692 | m_isCullingEnabled: 0 693 | m_horizontalMapping: 0 694 | m_verticalMapping: 0 695 | m_uvLineOffset: 0 696 | m_geometrySortingOrder: 0 697 | m_IsTextObjectScaleStatic: 0 698 | m_VertexBufferAutoSizeReduction: 0 699 | m_useMaxVisibleDescender: 1 700 | m_pageToDisplay: 1 701 | m_margin: {x: 0, y: 0, z: 0, w: 0} 702 | m_isUsingLegacyAnimationComponent: 0 703 | m_isVolumetricText: 0 704 | m_hasFontAssetChanged: 0 705 | m_baseMaterial: {fileID: 0} 706 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0} 707 | --- !u!1 &1785910143472904 708 | GameObject: 709 | m_ObjectHideFlags: 0 710 | m_CorrespondingSourceObject: {fileID: 0} 711 | m_PrefabInstance: {fileID: 0} 712 | m_PrefabAsset: {fileID: 0} 713 | serializedVersion: 6 714 | m_Component: 715 | - component: {fileID: 224737693311518052} 716 | - component: {fileID: 222175805939703770} 717 | - component: {fileID: 3887244321031527211} 718 | m_Layer: 5 719 | m_Name: LogText 720 | m_TagString: Untagged 721 | m_Icon: {fileID: 0} 722 | m_NavMeshLayer: 0 723 | m_StaticEditorFlags: 0 724 | m_IsActive: 1 725 | --- !u!224 &224737693311518052 726 | RectTransform: 727 | m_ObjectHideFlags: 0 728 | m_CorrespondingSourceObject: {fileID: 0} 729 | m_PrefabInstance: {fileID: 0} 730 | m_PrefabAsset: {fileID: 0} 731 | m_GameObject: {fileID: 1785910143472904} 732 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 733 | m_LocalPosition: {x: 0, y: 0, z: 0} 734 | m_LocalScale: {x: 1, y: 1, z: 1} 735 | m_ConstrainProportionsScale: 0 736 | m_Children: [] 737 | m_Father: {fileID: 22479264} 738 | m_RootOrder: 1 739 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 740 | m_AnchorMin: {x: 0, y: 0} 741 | m_AnchorMax: {x: 1, y: 1} 742 | m_AnchoredPosition: {x: 12.5, y: 0} 743 | m_SizeDelta: {x: -35, y: 0} 744 | m_Pivot: {x: 0.5, y: 0.5} 745 | --- !u!222 &222175805939703770 746 | CanvasRenderer: 747 | m_ObjectHideFlags: 0 748 | m_CorrespondingSourceObject: {fileID: 0} 749 | m_PrefabInstance: {fileID: 0} 750 | m_PrefabAsset: {fileID: 0} 751 | m_GameObject: {fileID: 1785910143472904} 752 | m_CullTransparentMesh: 1 753 | --- !u!114 &3887244321031527211 754 | MonoBehaviour: 755 | m_ObjectHideFlags: 0 756 | m_CorrespondingSourceObject: {fileID: 0} 757 | m_PrefabInstance: {fileID: 0} 758 | m_PrefabAsset: {fileID: 0} 759 | m_GameObject: {fileID: 1785910143472904} 760 | m_Enabled: 1 761 | m_EditorHideFlags: 0 762 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} 763 | m_Name: 764 | m_EditorClassIdentifier: 765 | m_Material: {fileID: 0} 766 | m_Color: {r: 1, g: 1, b: 1, a: 1} 767 | m_RaycastTarget: 0 768 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 769 | m_Maskable: 1 770 | m_OnCullStateChanged: 771 | m_PersistentCalls: 772 | m_Calls: [] 773 | m_text: Debug.Log summary 774 | m_isRightToLeft: 0 775 | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} 776 | m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} 777 | m_fontSharedMaterials: [] 778 | m_fontMaterial: {fileID: 0} 779 | m_fontMaterials: [] 780 | m_fontColor32: 781 | serializedVersion: 2 782 | rgba: 4292335574 783 | m_fontColor: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1} 784 | m_enableVertexGradient: 0 785 | m_colorMode: 3 786 | m_fontColorGradient: 787 | topLeft: {r: 1, g: 1, b: 1, a: 1} 788 | topRight: {r: 1, g: 1, b: 1, a: 1} 789 | bottomLeft: {r: 1, g: 1, b: 1, a: 1} 790 | bottomRight: {r: 1, g: 1, b: 1, a: 1} 791 | m_fontColorGradientPreset: {fileID: 0} 792 | m_spriteAsset: {fileID: 0} 793 | m_tintAllSprites: 0 794 | m_StyleSheet: {fileID: 0} 795 | m_TextStyleHashCode: -1183493901 796 | m_overrideHtmlColors: 0 797 | m_faceColor: 798 | serializedVersion: 2 799 | rgba: 4294967295 800 | m_fontSize: 13.5 801 | m_fontSizeBase: 13.5 802 | m_fontWeight: 400 803 | m_enableAutoSizing: 0 804 | m_fontSizeMin: 1 805 | m_fontSizeMax: 40 806 | m_fontStyle: 0 807 | m_HorizontalAlignment: 1 808 | m_VerticalAlignment: 512 809 | m_textAlignment: 65535 810 | m_characterSpacing: 0 811 | m_wordSpacing: 0 812 | m_lineSpacing: 0 813 | m_lineSpacingMax: 0 814 | m_paragraphSpacing: 0 815 | m_charWidthMaxAdj: 0 816 | m_enableWordWrapping: 1 817 | m_wordWrappingRatios: 0.4 818 | m_overflowMode: 1 819 | m_linkedTextComponent: {fileID: 0} 820 | parentLinkedComponent: {fileID: 0} 821 | m_enableKerning: 1 822 | m_enableExtraPadding: 0 823 | checkPaddingRequired: 0 824 | m_isRichText: 1 825 | m_parseCtrlCharacters: 0 826 | m_isOrthographic: 1 827 | m_isCullingEnabled: 0 828 | m_horizontalMapping: 0 829 | m_verticalMapping: 0 830 | m_uvLineOffset: 0 831 | m_geometrySortingOrder: 0 832 | m_IsTextObjectScaleStatic: 0 833 | m_VertexBufferAutoSizeReduction: 0 834 | m_useMaxVisibleDescender: 1 835 | m_pageToDisplay: 1 836 | m_margin: {x: 0, y: 0, z: 0, w: 0} 837 | m_isUsingLegacyAnimationComponent: 0 838 | m_isVolumetricText: 0 839 | m_hasFontAssetChanged: 0 840 | m_baseMaterial: {fileID: 0} 841 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0} 842 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 391be5df5ef62f345bb76a1051c04da7 3 | timeCreated: 1465919887 4 | licenseType: Free 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/README.txt: -------------------------------------------------------------------------------- 1 | = In-game Debug Console (v1.8.1) = 2 | 3 | Documentation: https://github.com/yasirkula/UnityIngameDebugConsole 4 | FAQ: https://github.com/yasirkula/UnityIngameDebugConsole#faq 5 | E-mail: yasirkula@gmail.com 6 | 7 | You can simply place the IngameDebugConsole prefab to your scene. Hovering the cursor over its properties in the Inspector will reveal explanatory tooltips. -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/README.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: edf2ac73f7bc3064c96d53009106dc53 3 | timeCreated: 1563307881 4 | licenseType: Free 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 860c08388401a6d4e858fe4910ea9337 3 | folderAsset: yes 4 | timeCreated: 1465930645 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/Attributes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7de74709c0f949d42853e89b41f0c939 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/Attributes/ConsoleAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | 4 | namespace IngameDebugConsole 5 | { 6 | public abstract class ConsoleAttribute : Attribute 7 | { 8 | public MethodInfo Method { get; private set; } 9 | public abstract int Order { get; } 10 | 11 | public void SetMethod(MethodInfo method) 12 | { 13 | if (Method != null) 14 | throw new Exception("Method was already initialized."); 15 | 16 | Method = method; 17 | } 18 | 19 | public abstract void Load(); 20 | } 21 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/Attributes/ConsoleAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: efc4511f2eea8034ca3a0a29cac8f554 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/Attributes/ConsoleCustomTypeParserAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace IngameDebugConsole 4 | { 5 | [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)] 6 | public class ConsoleCustomTypeParserAttribute : ConsoleAttribute 7 | { 8 | public readonly Type type; 9 | public readonly string readableName; 10 | 11 | public override int Order { get { return 0; } } 12 | 13 | public ConsoleCustomTypeParserAttribute(Type type, string readableName = null) 14 | { 15 | this.type = type; 16 | this.readableName = readableName; 17 | } 18 | 19 | public override void Load() 20 | { 21 | DebugLogConsole.AddCustomParameterType(type, (DebugLogConsole.ParseFunction)Delegate.CreateDelegate(typeof(DebugLogConsole.ParseFunction), Method), readableName); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/Attributes/ConsoleCustomTypeParserAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b014aa072d9631848babd5dafb325d3d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/Attributes/ConsoleMethodAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace IngameDebugConsole 4 | { 5 | [AttributeUsage( AttributeTargets.Method, Inherited = false, AllowMultiple = true )] 6 | public class ConsoleMethodAttribute : ConsoleAttribute 7 | { 8 | private string m_command; 9 | private string m_description; 10 | private string[] m_parameterNames; 11 | 12 | public string Command { get { return m_command; } } 13 | public string Description { get { return m_description; } } 14 | public string[] ParameterNames { get { return m_parameterNames; } } 15 | 16 | public override int Order { get { return 1; } } 17 | 18 | public ConsoleMethodAttribute( string command, string description, params string[] parameterNames ) 19 | { 20 | m_command = command; 21 | m_description = description; 22 | m_parameterNames = parameterNames; 23 | } 24 | 25 | public override void Load() 26 | { 27 | DebugLogConsole.AddCommand(Command, Description, Method, null, ParameterNames); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/Attributes/ConsoleMethodAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 324bb39c0bff0f74fa42f83e91f07e3a 3 | timeCreated: 1520710946 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | 4 | namespace IngameDebugConsole 5 | { 6 | public class CircularBuffer 7 | { 8 | private readonly T[] array; 9 | private int startIndex; 10 | 11 | public int Count { get; private set; } 12 | public T this[int index] { get { return array[( startIndex + index ) % array.Length]; } } 13 | 14 | public CircularBuffer( int capacity ) 15 | { 16 | array = new T[capacity]; 17 | } 18 | 19 | // Old elements are overwritten when capacity is reached 20 | public void Add( T value ) 21 | { 22 | if( Count < array.Length ) 23 | array[Count++] = value; 24 | else 25 | { 26 | array[startIndex] = value; 27 | if( ++startIndex >= array.Length ) 28 | startIndex = 0; 29 | } 30 | } 31 | } 32 | 33 | public class DynamicCircularBuffer 34 | { 35 | private T[] array; 36 | private int startIndex; 37 | 38 | public int Count { get; private set; } 39 | public int Capacity { get { return array.Length; } } 40 | 41 | public T this[int index] 42 | { 43 | get { return array[( startIndex + index ) % array.Length]; } 44 | set { array[( startIndex + index ) % array.Length] = value; } 45 | } 46 | 47 | public DynamicCircularBuffer( int initialCapacity = 2 ) 48 | { 49 | array = new T[initialCapacity]; 50 | } 51 | 52 | private void SetCapacity( int capacity ) 53 | { 54 | T[] newArray = new T[capacity]; 55 | if( Count > 0 ) 56 | { 57 | int elementsBeforeWrap = Mathf.Min( Count, array.Length - startIndex ); 58 | Array.Copy( array, startIndex, newArray, 0, elementsBeforeWrap ); 59 | if( elementsBeforeWrap < Count ) 60 | Array.Copy( array, 0, newArray, elementsBeforeWrap, Count - elementsBeforeWrap ); 61 | } 62 | 63 | array = newArray; 64 | startIndex = 0; 65 | } 66 | 67 | /// Inserts the value to the beginning of the collection. 68 | public void AddFirst( T value ) 69 | { 70 | if( array.Length == Count ) 71 | SetCapacity( Mathf.Max( array.Length * 2, 4 ) ); 72 | 73 | startIndex = ( startIndex > 0 ) ? ( startIndex - 1 ) : ( array.Length - 1 ); 74 | array[startIndex] = value; 75 | Count++; 76 | } 77 | 78 | /// Adds the value to the end of the collection. 79 | public void Add( T value ) 80 | { 81 | if( array.Length == Count ) 82 | SetCapacity( Mathf.Max( array.Length * 2, 4 ) ); 83 | 84 | this[Count++] = value; 85 | } 86 | 87 | public void AddRange( DynamicCircularBuffer other ) 88 | { 89 | if( other.Count == 0 ) 90 | return; 91 | 92 | if( array.Length < Count + other.Count ) 93 | SetCapacity( Mathf.Max( array.Length * 2, Count + other.Count ) ); 94 | 95 | int insertStartIndex = ( startIndex + Count ) % array.Length; 96 | int elementsBeforeWrap = Mathf.Min( other.Count, array.Length - insertStartIndex ); 97 | int otherElementsBeforeWrap = Mathf.Min( other.Count, other.array.Length - other.startIndex ); 98 | 99 | Array.Copy( other.array, other.startIndex, array, insertStartIndex, Mathf.Min( elementsBeforeWrap, otherElementsBeforeWrap ) ); 100 | if( elementsBeforeWrap < otherElementsBeforeWrap ) // This array wrapped before the other array 101 | Array.Copy( other.array, other.startIndex + elementsBeforeWrap, array, 0, otherElementsBeforeWrap - elementsBeforeWrap ); 102 | else if( elementsBeforeWrap > otherElementsBeforeWrap ) // The other array wrapped before this array 103 | Array.Copy( other.array, 0, array, insertStartIndex + otherElementsBeforeWrap, elementsBeforeWrap - otherElementsBeforeWrap ); 104 | 105 | int copiedElements = Mathf.Max( elementsBeforeWrap, otherElementsBeforeWrap ); 106 | if( copiedElements < other.Count ) // Both arrays wrapped and there's still some elements left to copy 107 | Array.Copy( other.array, copiedElements - otherElementsBeforeWrap, array, copiedElements - elementsBeforeWrap, other.Count - copiedElements ); 108 | 109 | Count += other.Count; 110 | } 111 | 112 | public T RemoveFirst() 113 | { 114 | T element = array[startIndex]; 115 | array[startIndex] = default( T ); 116 | 117 | if( ++startIndex == array.Length ) 118 | startIndex = 0; 119 | 120 | Count--; 121 | return element; 122 | } 123 | 124 | public T RemoveLast() 125 | { 126 | int index = ( startIndex + Count - 1 ) % array.Length; 127 | T element = array[index]; 128 | array[index] = default( T ); 129 | 130 | Count--; 131 | return element; 132 | } 133 | 134 | public int RemoveAll( Predicate shouldRemoveElement ) 135 | { 136 | return RemoveAll( shouldRemoveElement, null, null ); 137 | } 138 | 139 | public int RemoveAll( Predicate shouldRemoveElement, Action onElementIndexChanged, DynamicCircularBuffer synchronizedBuffer ) 140 | { 141 | Y[] synchronizedArray = ( synchronizedBuffer != null ) ? synchronizedBuffer.array : null; 142 | int elementsBeforeWrap = Mathf.Min( Count, array.Length - startIndex ); 143 | int removedElements = 0; 144 | int i = startIndex, newIndex = startIndex, endIndex = startIndex + elementsBeforeWrap; 145 | for( ; i < endIndex; i++ ) 146 | { 147 | if( shouldRemoveElement( array[i] ) ) 148 | removedElements++; 149 | else 150 | { 151 | if( removedElements > 0 ) 152 | { 153 | T element = array[i]; 154 | array[newIndex] = element; 155 | 156 | if( synchronizedArray != null ) 157 | synchronizedArray[newIndex] = synchronizedArray[i]; 158 | 159 | if( onElementIndexChanged != null ) 160 | onElementIndexChanged( element, newIndex - startIndex ); 161 | } 162 | 163 | newIndex++; 164 | } 165 | } 166 | 167 | i = 0; 168 | endIndex = Count - elementsBeforeWrap; 169 | 170 | if( newIndex < array.Length ) 171 | { 172 | for( ; i < endIndex; i++ ) 173 | { 174 | if( shouldRemoveElement( array[i] ) ) 175 | removedElements++; 176 | else 177 | { 178 | T element = array[i]; 179 | array[newIndex] = element; 180 | 181 | if( synchronizedArray != null ) 182 | synchronizedArray[newIndex] = synchronizedArray[i]; 183 | 184 | if( onElementIndexChanged != null ) 185 | onElementIndexChanged( element, newIndex - startIndex ); 186 | 187 | if( ++newIndex == array.Length ) 188 | { 189 | i++; 190 | break; 191 | } 192 | } 193 | } 194 | } 195 | 196 | if( newIndex == array.Length ) 197 | { 198 | newIndex = 0; 199 | for( ; i < endIndex; i++ ) 200 | { 201 | if( shouldRemoveElement( array[i] ) ) 202 | removedElements++; 203 | else 204 | { 205 | if( removedElements > 0 ) 206 | { 207 | T element = array[i]; 208 | array[newIndex] = element; 209 | 210 | if( synchronizedArray != null ) 211 | synchronizedArray[newIndex] = synchronizedArray[i]; 212 | 213 | if( onElementIndexChanged != null ) 214 | onElementIndexChanged( element, newIndex + elementsBeforeWrap ); 215 | } 216 | 217 | newIndex++; 218 | } 219 | } 220 | } 221 | 222 | TrimEnd( removedElements ); 223 | if( synchronizedBuffer != null ) 224 | synchronizedBuffer.TrimEnd( removedElements ); 225 | 226 | return removedElements; 227 | } 228 | 229 | public void TrimStart( int trimCount, Action perElementCallback = null ) 230 | { 231 | TrimInternal( trimCount, startIndex, perElementCallback ); 232 | startIndex = ( startIndex + trimCount ) % array.Length; 233 | } 234 | 235 | public void TrimEnd( int trimCount, Action perElementCallback = null ) 236 | { 237 | TrimInternal( trimCount, ( startIndex + Count - trimCount ) % array.Length, perElementCallback ); 238 | } 239 | 240 | private void TrimInternal( int trimCount, int startIndex, Action perElementCallback ) 241 | { 242 | int elementsBeforeWrap = Mathf.Min( trimCount, array.Length - startIndex ); 243 | if( perElementCallback == null ) 244 | { 245 | Array.Clear( array, startIndex, elementsBeforeWrap ); 246 | if( elementsBeforeWrap < trimCount ) 247 | Array.Clear( array, 0, trimCount - elementsBeforeWrap ); 248 | } 249 | else 250 | { 251 | for( int i = startIndex, endIndex = startIndex + elementsBeforeWrap; i < endIndex; i++ ) 252 | { 253 | perElementCallback( array[i] ); 254 | array[i] = default( T ); 255 | } 256 | 257 | for( int i = 0, endIndex = trimCount - elementsBeforeWrap; i < endIndex; i++ ) 258 | { 259 | perElementCallback( array[i] ); 260 | array[i] = default( T ); 261 | } 262 | } 263 | 264 | Count -= trimCount; 265 | } 266 | 267 | public void Clear() 268 | { 269 | int elementsBeforeWrap = Mathf.Min( Count, array.Length - startIndex ); 270 | Array.Clear( array, startIndex, elementsBeforeWrap ); 271 | if( elementsBeforeWrap < Count ) 272 | Array.Clear( array, 0, Count - elementsBeforeWrap ); 273 | 274 | startIndex = 0; 275 | Count = 0; 276 | } 277 | 278 | public int IndexOf( T value ) 279 | { 280 | int elementsBeforeWrap = Mathf.Min( Count, array.Length - startIndex ); 281 | int index = Array.IndexOf( array, value, startIndex, elementsBeforeWrap ); 282 | if( index >= 0 ) 283 | return index - startIndex; 284 | 285 | if( elementsBeforeWrap < Count ) 286 | { 287 | index = Array.IndexOf( array, value, 0, Count - elementsBeforeWrap ); 288 | if( index >= 0 ) 289 | return index + elementsBeforeWrap; 290 | } 291 | 292 | return -1; 293 | } 294 | 295 | public void ForEach( Action action ) 296 | { 297 | int elementsBeforeWrap = Mathf.Min( Count, array.Length - startIndex ); 298 | for( int i = startIndex, endIndex = startIndex + elementsBeforeWrap; i < endIndex; i++ ) 299 | action( array[i] ); 300 | for( int i = 0, endIndex = Count - elementsBeforeWrap; i < endIndex; i++ ) 301 | action( array[i] ); 302 | } 303 | } 304 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6136cb3c00eac0149901b8e7f2fecef8 3 | timeCreated: 1550943949 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d15693a03d0d33b4892c6365a2a97e19 3 | timeCreated: 1472036503 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Globalization; 3 | using System.Text; 4 | using UnityEngine; 5 | 6 | // Container for a simple debug entry 7 | namespace IngameDebugConsole 8 | { 9 | public class DebugLogEntry 10 | { 11 | private const int HASH_NOT_CALCULATED = -623218; 12 | 13 | public string logString; 14 | public string stackTrace; 15 | private string completeLog; 16 | 17 | // Sprite to show with this entry 18 | public LogType logType; 19 | 20 | // Collapsed count 21 | public int count; 22 | 23 | // Index of this entry among all collapsed entries 24 | public int collapsedIndex; 25 | 26 | private int hashValue; 27 | 28 | public void Initialize( string logString, string stackTrace ) 29 | { 30 | this.logString = logString; 31 | this.stackTrace = stackTrace; 32 | 33 | completeLog = null; 34 | count = 1; 35 | hashValue = HASH_NOT_CALCULATED; 36 | } 37 | 38 | public void Clear() 39 | { 40 | logString = null; 41 | stackTrace = null; 42 | completeLog = null; 43 | } 44 | 45 | // Checks if logString or stackTrace contains the search term 46 | public bool MatchesSearchTerm( string searchTerm ) 47 | { 48 | return ( logString != null && DebugLogConsole.caseInsensitiveComparer.IndexOf( logString, searchTerm, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) >= 0 ) || 49 | ( stackTrace != null && DebugLogConsole.caseInsensitiveComparer.IndexOf( stackTrace, searchTerm, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) >= 0 ); 50 | } 51 | 52 | // Return a string containing complete information about this debug entry 53 | public override string ToString() 54 | { 55 | if( completeLog == null ) 56 | completeLog = string.Concat( logString, "\n", stackTrace ); 57 | 58 | return completeLog; 59 | } 60 | 61 | // Credit: https://stackoverflow.com/a/19250516/2373034 62 | public int GetContentHashCode() 63 | { 64 | if( hashValue == HASH_NOT_CALCULATED ) 65 | { 66 | unchecked 67 | { 68 | hashValue = 17; 69 | hashValue = hashValue * 23 + ( logString == null ? 0 : logString.GetHashCode() ); 70 | hashValue = hashValue * 23 + ( stackTrace == null ? 0 : stackTrace.GetHashCode() ); 71 | } 72 | } 73 | 74 | return hashValue; 75 | } 76 | } 77 | 78 | public struct QueuedDebugLogEntry 79 | { 80 | public readonly string logString; 81 | public readonly string stackTrace; 82 | public readonly LogType logType; 83 | 84 | public QueuedDebugLogEntry( string logString, string stackTrace, LogType logType ) 85 | { 86 | this.logString = logString; 87 | this.stackTrace = stackTrace; 88 | this.logType = logType; 89 | } 90 | 91 | // Checks if logString or stackTrace contains the search term 92 | public bool MatchesSearchTerm( string searchTerm ) 93 | { 94 | return ( logString != null && DebugLogConsole.caseInsensitiveComparer.IndexOf( logString, searchTerm, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) >= 0 ) || 95 | ( stackTrace != null && DebugLogConsole.caseInsensitiveComparer.IndexOf( stackTrace, searchTerm, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) >= 0 ); 96 | } 97 | } 98 | 99 | public struct DebugLogEntryTimestamp 100 | { 101 | public readonly System.DateTime dateTime; 102 | #if !IDG_OMIT_ELAPSED_TIME 103 | public readonly float elapsedSeconds; 104 | #endif 105 | #if !IDG_OMIT_FRAMECOUNT 106 | public readonly int frameCount; 107 | #endif 108 | 109 | #if !IDG_OMIT_ELAPSED_TIME && !IDG_OMIT_FRAMECOUNT 110 | public DebugLogEntryTimestamp( System.DateTime dateTime, float elapsedSeconds, int frameCount ) 111 | #elif !IDG_OMIT_ELAPSED_TIME 112 | public DebugLogEntryTimestamp( System.DateTime dateTime, float elapsedSeconds ) 113 | #elif !IDG_OMIT_FRAMECOUNT 114 | public DebugLogEntryTimestamp( System.DateTime dateTime, int frameCount ) 115 | #else 116 | public DebugLogEntryTimestamp( System.DateTime dateTime ) 117 | #endif 118 | { 119 | this.dateTime = dateTime; 120 | #if !IDG_OMIT_ELAPSED_TIME 121 | this.elapsedSeconds = elapsedSeconds; 122 | #endif 123 | #if !IDG_OMIT_FRAMECOUNT 124 | this.frameCount = frameCount; 125 | #endif 126 | } 127 | 128 | public void AppendTime( StringBuilder sb ) 129 | { 130 | // Add DateTime in format: [HH:mm:ss] 131 | sb.Append( "[" ); 132 | 133 | int hour = dateTime.Hour; 134 | if( hour >= 10 ) 135 | sb.Append( hour ); 136 | else 137 | sb.Append( "0" ).Append( hour ); 138 | 139 | sb.Append( ":" ); 140 | 141 | int minute = dateTime.Minute; 142 | if( minute >= 10 ) 143 | sb.Append( minute ); 144 | else 145 | sb.Append( "0" ).Append( minute ); 146 | 147 | sb.Append( ":" ); 148 | 149 | int second = dateTime.Second; 150 | if( second >= 10 ) 151 | sb.Append( second ); 152 | else 153 | sb.Append( "0" ).Append( second ); 154 | 155 | sb.Append( "]" ); 156 | } 157 | 158 | public void AppendFullTimestamp( StringBuilder sb ) 159 | { 160 | AppendTime( sb ); 161 | 162 | #if !IDG_OMIT_ELAPSED_TIME && !IDG_OMIT_FRAMECOUNT 163 | // Append elapsed seconds and frame count in format: [1.0s at #Frame] 164 | sb.Append( "[" ).Append( elapsedSeconds.ToString( "F1" ) ).Append( "s at " ).Append( "#" ).Append( frameCount ).Append( "]" ); 165 | #elif !IDG_OMIT_ELAPSED_TIME 166 | // Append elapsed seconds in format: [1.0s] 167 | sb.Append( "[" ).Append( elapsedSeconds.ToString( "F1" ) ).Append( "s]" ); 168 | #elif !IDG_OMIT_FRAMECOUNT 169 | // Append frame count in format: [#Frame] 170 | sb.Append( "[#" ).Append( frameCount ).Append( "]" ); 171 | #endif 172 | } 173 | } 174 | 175 | public class DebugLogEntryContentEqualityComparer : EqualityComparer 176 | { 177 | public override bool Equals( DebugLogEntry x, DebugLogEntry y ) 178 | { 179 | return x.logString == y.logString && x.stackTrace == y.stackTrace; 180 | } 181 | 182 | public override int GetHashCode( DebugLogEntry obj ) 183 | { 184 | return obj.GetContentHashCode(); 185 | } 186 | } 187 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e7b1a420c564be040bf73b8a377fc2c2 3 | timeCreated: 1466375168 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | using UnityEngine.EventSystems; 4 | using System.Text; 5 | using TMPro; 6 | #if UNITY_EDITOR 7 | using UnityEditor; 8 | using System.Text.RegularExpressions; 9 | #endif 10 | 11 | // A UI element to show information about a debug entry 12 | namespace IngameDebugConsole 13 | { 14 | public class DebugLogItem : MonoBehaviour, IPointerClickHandler 15 | { 16 | #pragma warning disable 0649 17 | // Cached components 18 | [SerializeField] 19 | private RectTransform transformComponent; 20 | public RectTransform Transform { get { return transformComponent; } } 21 | 22 | [SerializeField] 23 | private Image imageComponent; 24 | public Image Image { get { return imageComponent; } } 25 | 26 | [SerializeField] 27 | private CanvasGroup canvasGroupComponent; 28 | public CanvasGroup CanvasGroup { get { return canvasGroupComponent; } } 29 | 30 | [SerializeField] 31 | private TextMeshProUGUI logText; 32 | [SerializeField] 33 | private Image logTypeImage; 34 | 35 | // Objects related to the collapsed count of the debug entry 36 | [SerializeField] 37 | private GameObject logCountParent; 38 | [SerializeField] 39 | private TextMeshProUGUI logCountText; 40 | 41 | [SerializeField] 42 | private Button copyLogButton; 43 | #pragma warning restore 0649 44 | 45 | // Debug entry to show with this log item 46 | private DebugLogEntry logEntry; 47 | public DebugLogEntry Entry { get { return logEntry; } } 48 | 49 | private DebugLogEntryTimestamp? logEntryTimestamp; 50 | public DebugLogEntryTimestamp? Timestamp { get { return logEntryTimestamp; } } 51 | 52 | // Index of the entry in the list of entries 53 | [System.NonSerialized] public int Index; 54 | 55 | private bool isExpanded; 56 | public bool Expanded { get { return isExpanded; } } 57 | 58 | private Vector2 logTextOriginalPosition; 59 | private Vector2 logTextOriginalSize; 60 | private float copyLogButtonHeight; 61 | 62 | private DebugLogRecycledListView listView; 63 | 64 | public void Initialize( DebugLogRecycledListView listView ) 65 | { 66 | this.listView = listView; 67 | 68 | logTextOriginalPosition = logText.rectTransform.anchoredPosition; 69 | logTextOriginalSize = logText.rectTransform.sizeDelta; 70 | copyLogButtonHeight = ( copyLogButton.transform as RectTransform ).anchoredPosition.y + ( copyLogButton.transform as RectTransform ).sizeDelta.y + 2f; // 2f: space between text and button 71 | 72 | logText.maxVisibleCharacters = listView.manager.maxLogLength; 73 | 74 | copyLogButton.onClick.AddListener( CopyLog ); 75 | #if !UNITY_EDITOR && UNITY_WEBGL 76 | copyLogButton.gameObject.AddComponent().Initialize( this ); 77 | #endif 78 | } 79 | 80 | public void SetContent( DebugLogEntry logEntry, DebugLogEntryTimestamp? logEntryTimestamp, int entryIndex, bool isExpanded ) 81 | { 82 | this.logEntry = logEntry; 83 | this.logEntryTimestamp = logEntryTimestamp; 84 | this.Index = entryIndex; 85 | this.isExpanded = isExpanded; 86 | 87 | Vector2 size = transformComponent.sizeDelta; 88 | if( isExpanded ) 89 | { 90 | size.y = listView.SelectedItemHeight; 91 | 92 | if( !copyLogButton.gameObject.activeSelf ) 93 | { 94 | copyLogButton.gameObject.SetActive( true ); 95 | 96 | logText.rectTransform.anchoredPosition = new Vector2( logTextOriginalPosition.x, logTextOriginalPosition.y + copyLogButtonHeight * 0.5f ); 97 | logText.rectTransform.sizeDelta = logTextOriginalSize - new Vector2( 0f, copyLogButtonHeight ); 98 | } 99 | } 100 | else 101 | { 102 | size.y = listView.ItemHeight; 103 | 104 | if( copyLogButton.gameObject.activeSelf ) 105 | { 106 | copyLogButton.gameObject.SetActive( false ); 107 | 108 | logText.rectTransform.anchoredPosition = logTextOriginalPosition; 109 | logText.rectTransform.sizeDelta = logTextOriginalSize; 110 | } 111 | } 112 | 113 | transformComponent.sizeDelta = size; 114 | 115 | SetText( logEntry, logEntryTimestamp, isExpanded ); 116 | logTypeImage.sprite = DebugLogManager.logSpriteRepresentations[(int) logEntry.logType]; 117 | } 118 | 119 | // Show the collapsed count of the debug entry 120 | public void ShowCount() 121 | { 122 | logCountText.SetText( "{0}", logEntry.count ); 123 | 124 | if( !logCountParent.activeSelf ) 125 | logCountParent.SetActive( true ); 126 | } 127 | 128 | // Hide the collapsed count of the debug entry 129 | public void HideCount() 130 | { 131 | if( logCountParent.activeSelf ) 132 | logCountParent.SetActive( false ); 133 | } 134 | 135 | // Update the debug entry's displayed timestamp 136 | public void UpdateTimestamp( DebugLogEntryTimestamp timestamp ) 137 | { 138 | logEntryTimestamp = timestamp; 139 | 140 | if( isExpanded || listView.manager.alwaysDisplayTimestamps ) 141 | SetText( logEntry, timestamp, isExpanded ); 142 | } 143 | 144 | private void SetText( DebugLogEntry logEntry, DebugLogEntryTimestamp? logEntryTimestamp, bool isExpanded ) 145 | { 146 | if( !logEntryTimestamp.HasValue || ( !isExpanded && !listView.manager.alwaysDisplayTimestamps ) ) 147 | logText.text = isExpanded ? logEntry.ToString() : logEntry.logString; 148 | else 149 | { 150 | StringBuilder sb = listView.manager.sharedStringBuilder; 151 | sb.Length = 0; 152 | 153 | if( isExpanded ) 154 | { 155 | logEntryTimestamp.Value.AppendFullTimestamp( sb ); 156 | sb.Append( ": " ).Append( logEntry.ToString() ); 157 | } 158 | else 159 | { 160 | logEntryTimestamp.Value.AppendTime( sb ); 161 | sb.Append( " " ).Append( logEntry.logString ); 162 | } 163 | 164 | logText.text = sb.ToString(); 165 | } 166 | } 167 | 168 | // This log item is clicked, show the debug entry's stack trace 169 | public void OnPointerClick( PointerEventData eventData ) 170 | { 171 | #if UNITY_EDITOR 172 | if( eventData.button == PointerEventData.InputButton.Right ) 173 | { 174 | Match regex = Regex.Match( logEntry.stackTrace, @"\(at .*\.cs:[0-9]+\)$", RegexOptions.Multiline ); 175 | if( regex.Success ) 176 | { 177 | string line = logEntry.stackTrace.Substring( regex.Index + 4, regex.Length - 5 ); 178 | int lineSeparator = line.IndexOf( ':' ); 179 | MonoScript script = AssetDatabase.LoadAssetAtPath( line.Substring( 0, lineSeparator ) ); 180 | if( script != null ) 181 | AssetDatabase.OpenAsset( script, int.Parse( line.Substring( lineSeparator + 1 ) ) ); 182 | } 183 | } 184 | else 185 | listView.OnLogItemClicked( this ); 186 | #else 187 | listView.OnLogItemClicked( this ); 188 | #endif 189 | } 190 | 191 | private void CopyLog() 192 | { 193 | #if UNITY_EDITOR || !UNITY_WEBGL 194 | string log = GetCopyContent(); 195 | if( !string.IsNullOrEmpty( log ) ) 196 | GUIUtility.systemCopyBuffer = log; 197 | #endif 198 | } 199 | 200 | internal string GetCopyContent() 201 | { 202 | if( !logEntryTimestamp.HasValue ) 203 | return logEntry.ToString(); 204 | else 205 | { 206 | StringBuilder sb = listView.manager.sharedStringBuilder; 207 | sb.Length = 0; 208 | 209 | logEntryTimestamp.Value.AppendFullTimestamp( sb ); 210 | sb.Append( ": " ).Append( logEntry.ToString() ); 211 | 212 | return sb.ToString(); 213 | } 214 | } 215 | 216 | /// Here, we're using instead of because the latter doesn't take 217 | /// into account. However, for to work, we need to give it 218 | /// enough space (increase log item's height) and let it regenerate its mesh . 219 | public float CalculateExpandedHeight( DebugLogEntry logEntry, DebugLogEntryTimestamp? logEntryTimestamp ) 220 | { 221 | string text = logText.text; 222 | Vector2 size = ( transform as RectTransform ).sizeDelta; 223 | 224 | ( transform as RectTransform ).sizeDelta = new Vector2( size.x, 10000f ); 225 | SetText( logEntry, logEntryTimestamp, true ); 226 | logText.ForceMeshUpdate(); 227 | float result = logText.GetRenderedValues( true ).y + copyLogButtonHeight; 228 | 229 | ( transform as RectTransform ).sizeDelta = size; 230 | logText.text = text; 231 | 232 | return Mathf.Max( listView.ItemHeight, result ); 233 | } 234 | 235 | // Return a string containing complete information about the debug entry 236 | public override string ToString() 237 | { 238 | return logEntry.ToString(); 239 | } 240 | } 241 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d2ea291be9de70a4abfec595203c96c1 3 | timeCreated: 1465919949 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogItemCopyWebGL.cs: -------------------------------------------------------------------------------- 1 | #if !UNITY_EDITOR && UNITY_WEBGL 2 | using System.Runtime.InteropServices; 3 | using UnityEngine; 4 | using UnityEngine.EventSystems; 5 | 6 | namespace IngameDebugConsole 7 | { 8 | public class DebugLogItemCopyWebGL : MonoBehaviour, IPointerDownHandler, IPointerUpHandler 9 | { 10 | [DllImport( "__Internal" )] 11 | private static extern void IngameDebugConsoleStartCopy( string textToCopy ); 12 | [DllImport( "__Internal" )] 13 | private static extern void IngameDebugConsoleCancelCopy(); 14 | 15 | private DebugLogItem logItem; 16 | 17 | public void Initialize( DebugLogItem logItem ) 18 | { 19 | this.logItem = logItem; 20 | } 21 | 22 | public void OnPointerDown( PointerEventData eventData ) 23 | { 24 | string log = logItem.GetCopyContent(); 25 | if( !string.IsNullOrEmpty( log ) ) 26 | IngameDebugConsoleStartCopy( log ); 27 | } 28 | 29 | public void OnPointerUp( PointerEventData eventData ) 30 | { 31 | if( eventData.dragging ) 32 | IngameDebugConsoleCancelCopy(); 33 | } 34 | } 35 | } 36 | #endif -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogItemCopyWebGL.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5a7d9d894141e704d8160fb4632121ac 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6a4f16ed905adcd4ab0d7c8c11f0d72c 3 | timeCreated: 1522092746 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: -9869 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | using UnityEngine.EventSystems; 4 | using System.Collections; 5 | using TMPro; 6 | #if UNITY_EDITOR && UNITY_2021_1_OR_NEWER 7 | using Screen = UnityEngine.Device.Screen; // To support Device Simulator on Unity 2021.1+ 8 | #endif 9 | 10 | // Manager class for the debug popup 11 | namespace IngameDebugConsole 12 | { 13 | public class DebugLogPopup : MonoBehaviour, IPointerClickHandler, IBeginDragHandler, IDragHandler, IEndDragHandler 14 | { 15 | private RectTransform popupTransform; 16 | 17 | // Dimensions of the popup divided by 2 18 | private Vector2 halfSize; 19 | 20 | // Background image that will change color to indicate an alert 21 | private Image backgroundImage; 22 | 23 | // Canvas group to modify visibility of the popup 24 | private CanvasGroup canvasGroup; 25 | 26 | #pragma warning disable 0649 27 | [SerializeField] 28 | private DebugLogManager debugManager; 29 | 30 | [SerializeField] 31 | private TextMeshProUGUI newInfoCountText; 32 | [SerializeField] 33 | private TextMeshProUGUI newWarningCountText; 34 | [SerializeField] 35 | private TextMeshProUGUI newErrorCountText; 36 | 37 | [SerializeField] 38 | private Color alertColorInfo; 39 | [SerializeField] 40 | private Color alertColorWarning; 41 | [SerializeField] 42 | private Color alertColorError; 43 | #pragma warning restore 0649 44 | 45 | // Number of new debug entries since the log window has been closed 46 | private int newInfoCount = 0, newWarningCount = 0, newErrorCount = 0; 47 | 48 | private Color normalColor; 49 | 50 | private bool isPopupBeingDragged = false; 51 | private Vector2 normalizedPosition; 52 | 53 | // Coroutines for simple code-based animations 54 | private IEnumerator moveToPosCoroutine = null; 55 | 56 | public bool IsVisible { get; private set; } 57 | 58 | private void Awake() 59 | { 60 | popupTransform = (RectTransform) transform; 61 | backgroundImage = GetComponent(); 62 | canvasGroup = GetComponent(); 63 | 64 | normalColor = backgroundImage.color; 65 | 66 | halfSize = popupTransform.sizeDelta * 0.5f; 67 | 68 | Vector2 pos = popupTransform.anchoredPosition; 69 | if( pos.x != 0f || pos.y != 0f ) 70 | normalizedPosition = pos.normalized; // Respect the initial popup position set in the prefab 71 | else 72 | normalizedPosition = new Vector2( 0.5f, 0f ); // Right edge by default 73 | } 74 | 75 | public void NewLogsArrived( int newInfo, int newWarning, int newError ) 76 | { 77 | if( newInfo > 0 ) 78 | { 79 | newInfoCount += newInfo; 80 | newInfoCountText.text = newInfoCount.ToString(); 81 | } 82 | 83 | if( newWarning > 0 ) 84 | { 85 | newWarningCount += newWarning; 86 | newWarningCountText.text = newWarningCount.ToString(); 87 | } 88 | 89 | if( newError > 0 ) 90 | { 91 | newErrorCount += newError; 92 | newErrorCountText.text = newErrorCount.ToString(); 93 | } 94 | 95 | if( newErrorCount > 0 ) 96 | backgroundImage.color = alertColorError; 97 | else if( newWarningCount > 0 ) 98 | backgroundImage.color = alertColorWarning; 99 | else 100 | backgroundImage.color = alertColorInfo; 101 | } 102 | 103 | private void ResetValues() 104 | { 105 | newInfoCount = 0; 106 | newWarningCount = 0; 107 | newErrorCount = 0; 108 | 109 | newInfoCountText.text = "0"; 110 | newWarningCountText.text = "0"; 111 | newErrorCountText.text = "0"; 112 | 113 | backgroundImage.color = normalColor; 114 | } 115 | 116 | // A simple smooth movement animation 117 | private IEnumerator MoveToPosAnimation( Vector2 targetPos ) 118 | { 119 | float modifier = 0f; 120 | Vector2 initialPos = popupTransform.anchoredPosition; 121 | 122 | while( modifier < 1f ) 123 | { 124 | modifier += 4f * Time.unscaledDeltaTime; 125 | popupTransform.anchoredPosition = Vector2.Lerp( initialPos, targetPos, modifier ); 126 | 127 | yield return null; 128 | } 129 | } 130 | 131 | // Popup is clicked 132 | public void OnPointerClick( PointerEventData data ) 133 | { 134 | // Hide the popup and show the log window 135 | if( !isPopupBeingDragged ) 136 | debugManager.ShowLogWindow(); 137 | } 138 | 139 | // Hides the log window and shows the popup 140 | public void Show() 141 | { 142 | canvasGroup.blocksRaycasts = true; 143 | canvasGroup.alpha = debugManager.popupOpacity; 144 | IsVisible = true; 145 | 146 | // Reset the counters 147 | ResetValues(); 148 | 149 | // Update position in case resolution was changed while the popup was hidden 150 | UpdatePosition( true ); 151 | } 152 | 153 | // Hide the popup 154 | public void Hide() 155 | { 156 | canvasGroup.blocksRaycasts = false; 157 | canvasGroup.alpha = 0f; 158 | 159 | IsVisible = false; 160 | isPopupBeingDragged = false; 161 | } 162 | 163 | public void OnBeginDrag( PointerEventData data ) 164 | { 165 | isPopupBeingDragged = true; 166 | 167 | // If a smooth movement animation is in progress, cancel it 168 | if( moveToPosCoroutine != null ) 169 | { 170 | StopCoroutine( moveToPosCoroutine ); 171 | moveToPosCoroutine = null; 172 | } 173 | } 174 | 175 | // Reposition the popup 176 | public void OnDrag( PointerEventData data ) 177 | { 178 | Vector2 localPoint; 179 | if( RectTransformUtility.ScreenPointToLocalPointInRectangle( debugManager.canvasTR, data.position, data.pressEventCamera, out localPoint ) ) 180 | popupTransform.anchoredPosition = localPoint; 181 | } 182 | 183 | // Smoothly translate the popup to the nearest edge 184 | public void OnEndDrag( PointerEventData data ) 185 | { 186 | isPopupBeingDragged = false; 187 | UpdatePosition( false ); 188 | } 189 | 190 | // There are 2 different spaces used in these calculations: 191 | // RectTransform space: raw anchoredPosition of the popup that's in range [-canvasSize/2, canvasSize/2] 192 | // Safe area space: Screen.safeArea space that's in range [safeAreaBottomLeft, safeAreaTopRight] where these corner positions 193 | // are all positive (calculated from bottom left corner of the screen instead of the center of the screen) 194 | public void UpdatePosition( bool immediately ) 195 | { 196 | Vector2 canvasRawSize = debugManager.canvasTR.rect.size; 197 | 198 | // Calculate safe area bounds 199 | float canvasWidth = canvasRawSize.x; 200 | float canvasHeight = canvasRawSize.y; 201 | 202 | float canvasBottomLeftX = 0f; 203 | float canvasBottomLeftY = 0f; 204 | 205 | if( debugManager.popupAvoidsScreenCutout ) 206 | { 207 | #if UNITY_EDITOR || UNITY_ANDROID || UNITY_IOS 208 | Rect safeArea = Screen.safeArea; 209 | 210 | int screenWidth = Screen.width; 211 | int screenHeight = Screen.height; 212 | 213 | canvasWidth *= safeArea.width / screenWidth; 214 | canvasHeight *= safeArea.height / screenHeight; 215 | 216 | canvasBottomLeftX = canvasRawSize.x * ( safeArea.x / screenWidth ); 217 | canvasBottomLeftY = canvasRawSize.y * ( safeArea.y / screenHeight ); 218 | #endif 219 | } 220 | 221 | // Calculate safe area position of the popup 222 | // normalizedPosition allows us to glue the popup to a specific edge of the screen. It becomes useful when 223 | // the popup is at the right edge and we switch from portrait screen orientation to landscape screen orientation. 224 | // Without normalizedPosition, popup could jump to bottom or top edges instead of staying at the right edge 225 | Vector2 pos = canvasRawSize * 0.5f + ( immediately ? new Vector2( normalizedPosition.x * canvasWidth, normalizedPosition.y * canvasHeight ) : ( popupTransform.anchoredPosition - new Vector2( canvasBottomLeftX, canvasBottomLeftY ) ) ); 226 | 227 | // Find distances to all four edges of the safe area 228 | float distToLeft = pos.x; 229 | float distToRight = canvasWidth - distToLeft; 230 | 231 | float distToBottom = pos.y; 232 | float distToTop = canvasHeight - distToBottom; 233 | 234 | float horDistance = Mathf.Min( distToLeft, distToRight ); 235 | float vertDistance = Mathf.Min( distToBottom, distToTop ); 236 | 237 | // Find the nearest edge's safe area coordinates 238 | if( horDistance < vertDistance ) 239 | { 240 | if( distToLeft < distToRight ) 241 | pos = new Vector2( halfSize.x, pos.y ); 242 | else 243 | pos = new Vector2( canvasWidth - halfSize.x, pos.y ); 244 | 245 | pos.y = Mathf.Clamp( pos.y, halfSize.y, canvasHeight - halfSize.y ); 246 | } 247 | else 248 | { 249 | if( distToBottom < distToTop ) 250 | pos = new Vector2( pos.x, halfSize.y ); 251 | else 252 | pos = new Vector2( pos.x, canvasHeight - halfSize.y ); 253 | 254 | pos.x = Mathf.Clamp( pos.x, halfSize.x, canvasWidth - halfSize.x ); 255 | } 256 | 257 | pos -= canvasRawSize * 0.5f; 258 | 259 | normalizedPosition.Set( pos.x / canvasWidth, pos.y / canvasHeight ); 260 | 261 | // Safe area's bottom left coordinates are added to pos only after normalizedPosition's value 262 | // is set because normalizedPosition is in range [-canvasWidth / 2, canvasWidth / 2] 263 | pos += new Vector2( canvasBottomLeftX, canvasBottomLeftY ); 264 | 265 | // If another smooth movement animation is in progress, cancel it 266 | if( moveToPosCoroutine != null ) 267 | { 268 | StopCoroutine( moveToPosCoroutine ); 269 | moveToPosCoroutine = null; 270 | } 271 | 272 | if( immediately ) 273 | popupTransform.anchoredPosition = pos; 274 | else 275 | { 276 | // Smoothly translate the popup to the specified position 277 | moveToPosCoroutine = MoveToPosAnimation( pos ); 278 | StartCoroutine( moveToPosCoroutine ); 279 | } 280 | } 281 | } 282 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 05cc4b1999716644c9308528e38e7081 3 | timeCreated: 1466533184 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | using UnityEngine.UI; 4 | 5 | // Handles the log items in an optimized way such that existing log items are 6 | // recycled within the list instead of creating a new log item at each chance 7 | namespace IngameDebugConsole 8 | { 9 | public class DebugLogRecycledListView : MonoBehaviour 10 | { 11 | #pragma warning disable 0649 12 | // Cached components 13 | [SerializeField] 14 | private RectTransform transformComponent; 15 | [SerializeField] 16 | private RectTransform viewportTransform; 17 | 18 | [SerializeField] 19 | private Color logItemNormalColor1; 20 | [SerializeField] 21 | private Color logItemNormalColor2; 22 | [SerializeField] 23 | private Color logItemSelectedColor; 24 | #pragma warning restore 0649 25 | 26 | internal DebugLogManager manager; 27 | private ScrollRect scrollView; 28 | 29 | private float logItemHeight; 30 | 31 | private DynamicCircularBuffer entriesToShow = null; 32 | private DynamicCircularBuffer timestampsOfEntriesToShow = null; 33 | 34 | private DebugLogEntry selectedLogEntry; 35 | private int indexOfSelectedLogEntry = int.MaxValue; 36 | private float heightOfSelectedLogEntry; 37 | private float DeltaHeightOfSelectedLogEntry { get { return heightOfSelectedLogEntry - logItemHeight; } } 38 | 39 | /// These properties are used by and . 40 | private int collapsedOrderOfSelectedLogEntry; 41 | private float scrollDistanceToSelectedLogEntry; 42 | 43 | // Log items used to visualize the visible debug entries 44 | private readonly DynamicCircularBuffer visibleLogItems = new DynamicCircularBuffer( 32 ); 45 | 46 | private bool isCollapseOn = false; 47 | 48 | // Current indices of debug entries shown on screen 49 | private int currentTopIndex = -1, currentBottomIndex = -1; 50 | 51 | private System.Predicate shouldRemoveLogItemPredicate; 52 | private System.Action poolLogItemAction; 53 | 54 | public float ItemHeight { get { return logItemHeight; } } 55 | public float SelectedItemHeight { get { return heightOfSelectedLogEntry; } } 56 | 57 | private void Awake() 58 | { 59 | scrollView = viewportTransform.GetComponentInParent(); 60 | scrollView.onValueChanged.AddListener( ( pos ) => 61 | { 62 | if( manager.IsLogWindowVisible ) 63 | UpdateItemsInTheList( false ); 64 | } ); 65 | } 66 | 67 | public void Initialize( DebugLogManager manager, DynamicCircularBuffer entriesToShow, DynamicCircularBuffer timestampsOfEntriesToShow, float logItemHeight ) 68 | { 69 | this.manager = manager; 70 | this.entriesToShow = entriesToShow; 71 | this.timestampsOfEntriesToShow = timestampsOfEntriesToShow; 72 | this.logItemHeight = logItemHeight; 73 | 74 | shouldRemoveLogItemPredicate = ShouldRemoveLogItem; 75 | poolLogItemAction = manager.PoolLogItem; 76 | } 77 | 78 | public void SetCollapseMode( bool collapse ) 79 | { 80 | isCollapseOn = collapse; 81 | } 82 | 83 | // A log item is clicked, highlight it 84 | public void OnLogItemClicked( DebugLogItem item ) 85 | { 86 | OnLogItemClickedInternal( item.Index, item ); 87 | } 88 | 89 | // Force expand the log item at specified index 90 | public void SelectAndFocusOnLogItemAtIndex( int itemIndex ) 91 | { 92 | if( indexOfSelectedLogEntry != itemIndex ) // Make sure that we aren't deselecting the target log item 93 | OnLogItemClickedInternal( itemIndex ); 94 | 95 | float viewportHeight = viewportTransform.rect.height; 96 | float transformComponentCenterYAtTop = viewportHeight * 0.5f; 97 | float transformComponentCenterYAtBottom = transformComponent.sizeDelta.y - viewportHeight * 0.5f; 98 | float transformComponentTargetCenterY = itemIndex * logItemHeight + viewportHeight * 0.5f; 99 | if( transformComponentCenterYAtTop == transformComponentCenterYAtBottom ) 100 | scrollView.verticalNormalizedPosition = 0.5f; 101 | else 102 | scrollView.verticalNormalizedPosition = Mathf.Clamp01( Mathf.InverseLerp( transformComponentCenterYAtBottom, transformComponentCenterYAtTop, transformComponentTargetCenterY ) ); 103 | 104 | manager.SnapToBottom = false; 105 | } 106 | 107 | private void OnLogItemClickedInternal( int itemIndex, DebugLogItem referenceItem = null ) 108 | { 109 | int indexOfPreviouslySelectedLogEntry = indexOfSelectedLogEntry; 110 | DeselectSelectedLogItem(); 111 | 112 | if( indexOfPreviouslySelectedLogEntry != itemIndex ) 113 | { 114 | selectedLogEntry = entriesToShow[itemIndex]; 115 | indexOfSelectedLogEntry = itemIndex; 116 | CalculateSelectedLogEntryHeight( referenceItem ); 117 | 118 | manager.SnapToBottom = false; 119 | } 120 | 121 | CalculateContentHeight(); 122 | UpdateItemsInTheList( true ); 123 | 124 | manager.ValidateScrollPosition(); 125 | } 126 | 127 | // Deselect the currently selected log item 128 | public void DeselectSelectedLogItem() 129 | { 130 | selectedLogEntry = null; 131 | indexOfSelectedLogEntry = int.MaxValue; 132 | heightOfSelectedLogEntry = 0f; 133 | } 134 | 135 | /// 136 | /// Cache the currently selected log item's properties so that its position can be restored after is called. 137 | /// 138 | public void OnBeforeFilterLogs() 139 | { 140 | collapsedOrderOfSelectedLogEntry = 0; 141 | scrollDistanceToSelectedLogEntry = 0f; 142 | 143 | if( selectedLogEntry != null ) 144 | { 145 | if( !isCollapseOn ) 146 | { 147 | for( int i = 0; i < indexOfSelectedLogEntry; i++ ) 148 | { 149 | if( entriesToShow[i] == selectedLogEntry ) 150 | collapsedOrderOfSelectedLogEntry++; 151 | } 152 | } 153 | 154 | scrollDistanceToSelectedLogEntry = indexOfSelectedLogEntry * ItemHeight - transformComponent.anchoredPosition.y; 155 | } 156 | } 157 | 158 | /// 159 | /// See . 160 | /// 161 | public void OnAfterFilterLogs() 162 | { 163 | // Refresh selected log entry's index 164 | int newIndexOfSelectedLogEntry = -1; 165 | if( selectedLogEntry != null ) 166 | { 167 | for( int i = 0; i < entriesToShow.Count; i++ ) 168 | { 169 | if( entriesToShow[i] == selectedLogEntry && collapsedOrderOfSelectedLogEntry-- == 0 ) 170 | { 171 | newIndexOfSelectedLogEntry = i; 172 | break; 173 | } 174 | } 175 | } 176 | 177 | if( newIndexOfSelectedLogEntry < 0 ) 178 | DeselectSelectedLogItem(); 179 | else 180 | { 181 | indexOfSelectedLogEntry = newIndexOfSelectedLogEntry; 182 | transformComponent.anchoredPosition = new Vector2( 0f, newIndexOfSelectedLogEntry * ItemHeight - scrollDistanceToSelectedLogEntry ); 183 | } 184 | } 185 | 186 | // Number of debug entries may have changed, update the list 187 | public void OnLogEntriesUpdated( bool updateAllVisibleItemContents ) 188 | { 189 | CalculateContentHeight(); 190 | UpdateItemsInTheList( updateAllVisibleItemContents ); 191 | } 192 | 193 | // A single collapsed log entry at specified index is updated, refresh its item if visible 194 | public void OnCollapsedLogEntryAtIndexUpdated( int index ) 195 | { 196 | if( index >= currentTopIndex && index <= currentBottomIndex ) 197 | { 198 | DebugLogItem logItem = GetLogItemAtIndex( index ); 199 | logItem.ShowCount(); 200 | 201 | if( timestampsOfEntriesToShow != null ) 202 | logItem.UpdateTimestamp( timestampsOfEntriesToShow[index] ); 203 | } 204 | } 205 | 206 | public void RefreshCollapsedLogEntryCounts() 207 | { 208 | for( int i = 0; i < visibleLogItems.Count; i++ ) 209 | visibleLogItems[i].ShowCount(); 210 | } 211 | 212 | public void OnLogEntriesRemoved( int removedLogCount ) 213 | { 214 | if( selectedLogEntry != null ) 215 | { 216 | bool isSelectedLogEntryRemoved = isCollapseOn ? ( selectedLogEntry.count == 0 ) : ( indexOfSelectedLogEntry < removedLogCount ); 217 | if( isSelectedLogEntryRemoved ) 218 | DeselectSelectedLogItem(); 219 | else 220 | indexOfSelectedLogEntry = isCollapseOn ? FindIndexOfLogEntryInReverseDirection( selectedLogEntry, indexOfSelectedLogEntry ) : ( indexOfSelectedLogEntry - removedLogCount ); 221 | } 222 | 223 | if( !manager.IsLogWindowVisible && manager.SnapToBottom ) 224 | { 225 | // When log window becomes visible, it refreshes all logs. So unless snap to bottom is disabled, we don't need to 226 | // keep track of either the scroll position or the visible log items' positions. 227 | visibleLogItems.TrimStart( visibleLogItems.Count, poolLogItemAction ); 228 | } 229 | else if( !isCollapseOn ) 230 | visibleLogItems.TrimStart( Mathf.Clamp( removedLogCount - currentTopIndex, 0, visibleLogItems.Count ), poolLogItemAction ); 231 | else 232 | { 233 | visibleLogItems.RemoveAll( shouldRemoveLogItemPredicate ); 234 | if( visibleLogItems.Count > 0 ) 235 | removedLogCount = currentTopIndex - FindIndexOfLogEntryInReverseDirection( visibleLogItems[0].Entry, visibleLogItems[0].Index ); 236 | } 237 | 238 | if( visibleLogItems.Count == 0 ) 239 | { 240 | currentTopIndex = -1; 241 | 242 | if( !manager.SnapToBottom ) 243 | transformComponent.anchoredPosition = Vector2.zero; 244 | } 245 | else 246 | { 247 | currentTopIndex = Mathf.Max( 0, currentTopIndex - removedLogCount ); 248 | currentBottomIndex = currentTopIndex + visibleLogItems.Count - 1; 249 | 250 | float firstVisibleLogItemInitialYPos = visibleLogItems[0].Transform.anchoredPosition.y; 251 | for( int i = 0; i < visibleLogItems.Count; i++ ) 252 | { 253 | DebugLogItem logItem = visibleLogItems[i]; 254 | logItem.Index = currentTopIndex + i; 255 | 256 | // If log window is visible, we need to manually refresh the visible items' visual properties. Otherwise, all log items will be refreshed when log window is opened 257 | if( manager.IsLogWindowVisible ) 258 | { 259 | RepositionLogItem( logItem ); 260 | ColorLogItem( logItem ); 261 | 262 | // Update collapsed count of the log items in collapsed mode 263 | if( isCollapseOn ) 264 | logItem.ShowCount(); 265 | } 266 | } 267 | 268 | // Shift the ScrollRect 269 | if( !manager.SnapToBottom ) 270 | transformComponent.anchoredPosition = new Vector2( 0f, Mathf.Max( 0f, transformComponent.anchoredPosition.y - ( visibleLogItems[0].Transform.anchoredPosition.y - firstVisibleLogItemInitialYPos ) ) ); 271 | } 272 | } 273 | 274 | private bool ShouldRemoveLogItem( DebugLogItem logItem ) 275 | { 276 | if( logItem.Entry.count == 0 ) 277 | { 278 | poolLogItemAction( logItem ); 279 | return true; 280 | } 281 | 282 | return false; 283 | } 284 | 285 | private int FindIndexOfLogEntryInReverseDirection( DebugLogEntry logEntry, int startIndex ) 286 | { 287 | for( int i = Mathf.Min( startIndex, entriesToShow.Count - 1 ); i >= 0; i-- ) 288 | { 289 | if( entriesToShow[i] == logEntry ) 290 | return i; 291 | } 292 | 293 | return -1; 294 | } 295 | 296 | // Log window's width has changed, update the expanded (currently selected) log's height 297 | public void OnViewportWidthChanged() 298 | { 299 | if( indexOfSelectedLogEntry >= entriesToShow.Count ) 300 | return; 301 | 302 | CalculateSelectedLogEntryHeight(); 303 | CalculateContentHeight(); 304 | UpdateItemsInTheList( true ); 305 | 306 | manager.ValidateScrollPosition(); 307 | } 308 | 309 | // Log window's height has changed, update the list 310 | public void OnViewportHeightChanged() 311 | { 312 | UpdateItemsInTheList( false ); 313 | } 314 | 315 | private void CalculateContentHeight() 316 | { 317 | float newHeight = Mathf.Max( 1f, entriesToShow.Count * logItemHeight ); 318 | if( selectedLogEntry != null ) 319 | newHeight += DeltaHeightOfSelectedLogEntry; 320 | 321 | transformComponent.sizeDelta = new Vector2( 0f, newHeight ); 322 | } 323 | 324 | private void CalculateSelectedLogEntryHeight( DebugLogItem referenceItem = null ) 325 | { 326 | if( !referenceItem ) 327 | { 328 | if( visibleLogItems.Count == 0 ) 329 | { 330 | UpdateItemsInTheList( false ); // Try to generate some DebugLogItems, we need one DebugLogItem to calculate the text height 331 | if( visibleLogItems.Count == 0 ) // No DebugLogItems are generated, weird 332 | return; 333 | } 334 | 335 | referenceItem = visibleLogItems[0]; 336 | } 337 | 338 | heightOfSelectedLogEntry = referenceItem.CalculateExpandedHeight( selectedLogEntry, ( timestampsOfEntriesToShow != null ) ? timestampsOfEntriesToShow[indexOfSelectedLogEntry] : (DebugLogEntryTimestamp?) null ); 339 | } 340 | 341 | // Calculate the indices of log entries to show 342 | // and handle log items accordingly 343 | private void UpdateItemsInTheList( bool updateAllVisibleItemContents ) 344 | { 345 | if( entriesToShow.Count > 0 ) 346 | { 347 | float contentPosTop = transformComponent.anchoredPosition.y - 1f; 348 | float contentPosBottom = contentPosTop + viewportTransform.rect.height + 2f; 349 | float positionOfSelectedLogEntry = indexOfSelectedLogEntry * logItemHeight; 350 | 351 | if( positionOfSelectedLogEntry <= contentPosBottom ) 352 | { 353 | if( positionOfSelectedLogEntry <= contentPosTop ) 354 | { 355 | contentPosTop = Mathf.Max( contentPosTop - DeltaHeightOfSelectedLogEntry, positionOfSelectedLogEntry - 1f ); 356 | contentPosBottom = Mathf.Max( contentPosBottom - DeltaHeightOfSelectedLogEntry, contentPosTop + 2f ); 357 | } 358 | else 359 | contentPosBottom = Mathf.Max( contentPosBottom - DeltaHeightOfSelectedLogEntry, positionOfSelectedLogEntry + 1f ); 360 | } 361 | 362 | int newBottomIndex = Mathf.Min( (int) ( contentPosBottom / logItemHeight ), entriesToShow.Count - 1 ); 363 | int newTopIndex = Mathf.Clamp( (int) ( contentPosTop / logItemHeight ), 0, newBottomIndex ); 364 | 365 | if( currentTopIndex == -1 ) 366 | { 367 | // There are no log items visible on screen, 368 | // just create the new log items 369 | updateAllVisibleItemContents = true; 370 | for( int i = 0, count = newBottomIndex - newTopIndex + 1; i < count; i++ ) 371 | visibleLogItems.Add( manager.PopLogItem() ); 372 | } 373 | else 374 | { 375 | // There are some log items visible on screen 376 | 377 | if( newBottomIndex < currentTopIndex || newTopIndex > currentBottomIndex ) 378 | { 379 | // If user scrolled a lot such that, none of the log items are now within 380 | // the bounds of the scroll view, pool all the previous log items and create 381 | // new log items for the new list of visible debug entries 382 | updateAllVisibleItemContents = true; 383 | 384 | visibleLogItems.TrimStart( visibleLogItems.Count, poolLogItemAction ); 385 | for( int i = 0, count = newBottomIndex - newTopIndex + 1; i < count; i++ ) 386 | visibleLogItems.Add( manager.PopLogItem() ); 387 | } 388 | else 389 | { 390 | // User did not scroll a lot such that, there are still some log items within 391 | // the bounds of the scroll view. Don't destroy them but update their content, 392 | // if necessary 393 | if( newTopIndex > currentTopIndex ) 394 | visibleLogItems.TrimStart( newTopIndex - currentTopIndex, poolLogItemAction ); 395 | 396 | if( newBottomIndex < currentBottomIndex ) 397 | visibleLogItems.TrimEnd( currentBottomIndex - newBottomIndex, poolLogItemAction ); 398 | 399 | if( newTopIndex < currentTopIndex ) 400 | { 401 | for( int i = 0, count = currentTopIndex - newTopIndex; i < count; i++ ) 402 | visibleLogItems.AddFirst( manager.PopLogItem() ); 403 | 404 | // If it is not necessary to update all the log items, 405 | // then just update the newly created log items. Otherwise, 406 | // wait for the major update 407 | if( !updateAllVisibleItemContents ) 408 | UpdateLogItemContentsBetweenIndices( newTopIndex, currentTopIndex - 1, newTopIndex ); 409 | } 410 | 411 | if( newBottomIndex > currentBottomIndex ) 412 | { 413 | for( int i = 0, count = newBottomIndex - currentBottomIndex; i < count; i++ ) 414 | visibleLogItems.Add( manager.PopLogItem() ); 415 | 416 | // If it is not necessary to update all the log items, 417 | // then just update the newly created log items. Otherwise, 418 | // wait for the major update 419 | if( !updateAllVisibleItemContents ) 420 | UpdateLogItemContentsBetweenIndices( currentBottomIndex + 1, newBottomIndex, newTopIndex ); 421 | } 422 | } 423 | } 424 | 425 | currentTopIndex = newTopIndex; 426 | currentBottomIndex = newBottomIndex; 427 | 428 | if( updateAllVisibleItemContents ) 429 | { 430 | // Update all the log items 431 | UpdateLogItemContentsBetweenIndices( currentTopIndex, currentBottomIndex, newTopIndex ); 432 | } 433 | } 434 | else if( currentTopIndex != -1 ) 435 | { 436 | // There is nothing to show but some log items are still visible; pool them 437 | visibleLogItems.TrimStart( visibleLogItems.Count, poolLogItemAction ); 438 | currentTopIndex = -1; 439 | } 440 | } 441 | 442 | private DebugLogItem GetLogItemAtIndex( int index ) 443 | { 444 | return visibleLogItems[index - currentTopIndex]; 445 | } 446 | 447 | private void UpdateLogItemContentsBetweenIndices( int topIndex, int bottomIndex, int logItemOffset ) 448 | { 449 | for( int i = topIndex; i <= bottomIndex; i++ ) 450 | { 451 | DebugLogItem logItem = visibleLogItems[i - logItemOffset]; 452 | logItem.SetContent( entriesToShow[i], ( timestampsOfEntriesToShow != null ) ? timestampsOfEntriesToShow[i] : (DebugLogEntryTimestamp?) null, i, i == indexOfSelectedLogEntry ); 453 | 454 | RepositionLogItem( logItem ); 455 | ColorLogItem( logItem ); 456 | 457 | if( isCollapseOn ) 458 | logItem.ShowCount(); 459 | else 460 | logItem.HideCount(); 461 | } 462 | } 463 | 464 | private void RepositionLogItem( DebugLogItem logItem ) 465 | { 466 | int index = logItem.Index; 467 | Vector2 anchoredPosition = new Vector2( 1f, -index * logItemHeight ); 468 | if( index > indexOfSelectedLogEntry ) 469 | anchoredPosition.y -= DeltaHeightOfSelectedLogEntry; 470 | 471 | logItem.Transform.anchoredPosition = anchoredPosition; 472 | } 473 | 474 | private void ColorLogItem( DebugLogItem logItem ) 475 | { 476 | int index = logItem.Index; 477 | if( index == indexOfSelectedLogEntry ) 478 | logItem.Image.color = logItemSelectedColor; 479 | else if( index % 2 == 0 ) 480 | logItem.Image.color = logItemNormalColor1; 481 | else 482 | logItem.Image.color = logItemNormalColor2; 483 | } 484 | } 485 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ce231987d32488f43b6fb798f7df43f6 3 | timeCreated: 1466373025 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.EventSystems; 3 | 4 | // Listens to drag event on the DebugLogManager's resize button 5 | namespace IngameDebugConsole 6 | { 7 | public class DebugLogResizeListener : MonoBehaviour, IBeginDragHandler, IDragHandler 8 | { 9 | #pragma warning disable 0649 10 | [SerializeField] 11 | private DebugLogManager debugManager; 12 | #pragma warning restore 0649 13 | 14 | // This interface must be implemented in order to receive drag events 15 | void IBeginDragHandler.OnBeginDrag( PointerEventData eventData ) 16 | { 17 | } 18 | 19 | void IDragHandler.OnDrag( PointerEventData eventData ) 20 | { 21 | debugManager.Resize( eventData ); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6565f2084f5aef44abe57c988745b9c3 3 | timeCreated: 1601221093 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | using UnityEngine.EventSystems; 4 | 5 | // Listens to scroll events on the scroll rect that debug items are stored 6 | // and decides whether snap to bottom should be true or not 7 | // 8 | // Procedure: if, after a user input (drag or scroll), scrollbar is at the bottom, then 9 | // snap to bottom shall be true, otherwise it shall be false 10 | namespace IngameDebugConsole 11 | { 12 | public class DebugsOnScrollListener : MonoBehaviour, IScrollHandler, IBeginDragHandler, IEndDragHandler 13 | { 14 | public ScrollRect debugsScrollRect; 15 | public DebugLogManager debugLogManager; 16 | 17 | public void OnScroll( PointerEventData data ) 18 | { 19 | debugLogManager.SnapToBottom = IsScrollbarAtBottom(); 20 | } 21 | 22 | public void OnBeginDrag( PointerEventData data ) 23 | { 24 | debugLogManager.SnapToBottom = false; 25 | } 26 | 27 | public void OnEndDrag( PointerEventData data ) 28 | { 29 | debugLogManager.SnapToBottom = IsScrollbarAtBottom(); 30 | } 31 | 32 | public void OnScrollbarDragStart( BaseEventData data ) 33 | { 34 | debugLogManager.SnapToBottom = false; 35 | } 36 | 37 | public void OnScrollbarDragEnd( BaseEventData data ) 38 | { 39 | debugLogManager.SnapToBottom = IsScrollbarAtBottom(); 40 | } 41 | 42 | private bool IsScrollbarAtBottom() 43 | { 44 | return debugsScrollRect.verticalNormalizedPosition <= 1E-6f; 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cb564dcb180e586429c57456166a76b5 3 | timeCreated: 1466004663 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/EventSystemHandler.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.EventSystems; 3 | using UnityEngine.SceneManagement; 4 | #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER 5 | using UnityEngine.InputSystem.UI; 6 | #endif 7 | 8 | namespace IngameDebugConsole 9 | { 10 | // Avoid multiple EventSystems in the scene by activating the embedded EventSystem only if one doesn't already exist in the scene 11 | [DefaultExecutionOrder( 1000 )] 12 | public class EventSystemHandler : MonoBehaviour 13 | { 14 | #pragma warning disable 0649 15 | [SerializeField] 16 | private GameObject embeddedEventSystem; 17 | #pragma warning restore 0649 18 | 19 | #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER 20 | private void Awake() 21 | { 22 | StandaloneInputModule legacyInputModule = embeddedEventSystem.GetComponent(); 23 | if( legacyInputModule ) 24 | { 25 | DestroyImmediate( legacyInputModule ); 26 | embeddedEventSystem.AddComponent(); 27 | } 28 | } 29 | #endif 30 | 31 | private void OnEnable() 32 | { 33 | SceneManager.sceneLoaded -= OnSceneLoaded; 34 | SceneManager.sceneLoaded += OnSceneLoaded; 35 | SceneManager.sceneUnloaded -= OnSceneUnloaded; 36 | SceneManager.sceneUnloaded += OnSceneUnloaded; 37 | 38 | ActivateEventSystemIfNeeded(); 39 | } 40 | 41 | private void OnDisable() 42 | { 43 | SceneManager.sceneLoaded -= OnSceneLoaded; 44 | SceneManager.sceneUnloaded -= OnSceneUnloaded; 45 | 46 | DeactivateEventSystem(); 47 | } 48 | 49 | private void OnSceneLoaded( Scene scene, LoadSceneMode mode ) 50 | { 51 | DeactivateEventSystem(); 52 | ActivateEventSystemIfNeeded(); 53 | } 54 | 55 | private void OnSceneUnloaded( Scene current ) 56 | { 57 | // Deactivate the embedded EventSystem before changing scenes because the new scene might have its own EventSystem 58 | DeactivateEventSystem(); 59 | } 60 | 61 | private void ActivateEventSystemIfNeeded() 62 | { 63 | if( embeddedEventSystem && !EventSystem.current ) 64 | embeddedEventSystem.SetActive( true ); 65 | } 66 | 67 | private void DeactivateEventSystem() 68 | { 69 | if( embeddedEventSystem ) 70 | embeddedEventSystem.SetActive( false ); 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Scripts/EventSystemHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c3cc1b407f337e641ad32a2e91d5b478 3 | timeCreated: 1658741613 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cb5d7b23a9e684a41a6a5d4f300eb1e6 3 | folderAsset: yes 4 | timeCreated: 1465925237 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconClear.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconClear.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconClear.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7a9e374666ad6cc47807bb001844f3d8 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 1 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 1 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 1 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 32 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 0 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 1 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: [] 119 | outline: [] 120 | physicsShape: [] 121 | bones: [] 122 | spriteID: 5e97eb03825dee720800000000000000 123 | internalID: 0 124 | vertices: [] 125 | indices: 126 | edges: [] 127 | weights: [] 128 | secondaryTextures: [] 129 | nameFileIdTable: {} 130 | spritePackingTag: DebugLogUI 131 | pSDRemoveMatte: 1 132 | pSDShowRemoveMatteOption: 1 133 | userData: 134 | assetBundleName: 135 | assetBundleVariant: 136 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconCollapse.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconCollapse.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d1546f8db185caf4dafcfa58efa3ba2c 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconError.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconError.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconError.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66305a19e3614694f868c75a982e6b68 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconHide.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconHide.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconHide.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b3905a73a6672d9449647aaf036e23fc 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconInfo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconInfo.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconInfo.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5a97d5afa6254804f81b7ba956296996 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconResizeAllDirections.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconResizeAllDirections.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconResizeAllDirections.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7f0db3cf23c93fc4eac01cb3a52388ee 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 1 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 1 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 1 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconResizeVertialOnly.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconResizeVertialOnly.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconResizeVertialOnly.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a9fd8f6b461461f4a92eafc60921ee78 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 066c0b04be98cd348abb79add91d42bf 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b902f763d0e47364dae25207b7e47800 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 13, y: 13, z: 13, w: 13} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconWarning.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/IconWarning.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IconWarning.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 05c7216c78d4dd34ebe2bac9c1e274d7 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IngameDebugConsoleSpriteAtlas.spriteatlas: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!687078895 &4343727234628468602 4 | SpriteAtlas: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: IngameDebugConsoleSpriteAtlas 10 | m_EditorData: 11 | serializedVersion: 2 12 | textureSettings: 13 | serializedVersion: 2 14 | anisoLevel: 1 15 | compressionQuality: 50 16 | maxTextureSize: 2048 17 | textureCompression: 0 18 | filterMode: 1 19 | generateMipMaps: 0 20 | readable: 0 21 | crunchedCompression: 0 22 | sRGB: 1 23 | platformSettings: 24 | - serializedVersion: 3 25 | m_BuildTarget: DefaultTexturePlatform 26 | m_MaxTextureSize: 2048 27 | m_ResizeAlgorithm: 0 28 | m_TextureFormat: -1 29 | m_TextureCompression: 0 30 | m_CompressionQuality: 50 31 | m_CrunchedCompression: 0 32 | m_AllowsAlphaSplitting: 0 33 | m_Overridden: 0 34 | m_AndroidETC2FallbackOverride: 0 35 | m_ForceMaximumCompressionQuality_BC6H_BC7: 1 36 | packingSettings: 37 | serializedVersion: 2 38 | padding: 8 39 | blockOffset: 1 40 | allowAlphaSplitting: 0 41 | enableRotation: 0 42 | enableTightPacking: 0 43 | enableAlphaDilation: 0 44 | secondaryTextureSettings: {} 45 | variantMultiplier: 1 46 | packables: 47 | - {fileID: 2800000, guid: 7a9e374666ad6cc47807bb001844f3d8, type: 3} 48 | - {fileID: 2800000, guid: d1546f8db185caf4dafcfa58efa3ba2c, type: 3} 49 | - {fileID: 2800000, guid: 66305a19e3614694f868c75a982e6b68, type: 3} 50 | - {fileID: 2800000, guid: b3905a73a6672d9449647aaf036e23fc, type: 3} 51 | - {fileID: 2800000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3} 52 | - {fileID: 2800000, guid: 7f0db3cf23c93fc4eac01cb3a52388ee, type: 3} 53 | - {fileID: 2800000, guid: a9fd8f6b461461f4a92eafc60921ee78, type: 3} 54 | - {fileID: 2800000, guid: 066c0b04be98cd348abb79add91d42bf, type: 3} 55 | - {fileID: 2800000, guid: b902f763d0e47364dae25207b7e47800, type: 3} 56 | - {fileID: 2800000, guid: 05c7216c78d4dd34ebe2bac9c1e274d7, type: 3} 57 | - {fileID: 2800000, guid: e04e6c970b950d946a782ea08e5f971d, type: 3} 58 | - {fileID: 2800000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} 59 | - {fileID: 2800000, guid: 98e8e1cf8dc7dbf469617c2e40c8a944, type: 3} 60 | - {fileID: 2800000, guid: b3f0d976f6d6802479d6465d11b3aa68, type: 3} 61 | bindAsDefault: 1 62 | isAtlasV2: 0 63 | cachedData: {fileID: 0} 64 | m_MasterAtlas: {fileID: 0} 65 | m_PackedSprites: 66 | - {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3} 67 | - {fileID: 21300000, guid: b902f763d0e47364dae25207b7e47800, type: 3} 68 | - {fileID: 21300000, guid: b3905a73a6672d9449647aaf036e23fc, type: 3} 69 | - {fileID: 21300000, guid: 066c0b04be98cd348abb79add91d42bf, type: 3} 70 | - {fileID: 21300000, guid: 7a9e374666ad6cc47807bb001844f3d8, type: 3} 71 | - {fileID: 21300000, guid: b3f0d976f6d6802479d6465d11b3aa68, type: 3} 72 | - {fileID: 21300000, guid: e04e6c970b950d946a782ea08e5f971d, type: 3} 73 | - {fileID: 21300000, guid: 66305a19e3614694f868c75a982e6b68, type: 3} 74 | - {fileID: 21300000, guid: a9fd8f6b461461f4a92eafc60921ee78, type: 3} 75 | - {fileID: 21300000, guid: 05c7216c78d4dd34ebe2bac9c1e274d7, type: 3} 76 | - {fileID: 21300000, guid: d1546f8db185caf4dafcfa58efa3ba2c, type: 3} 77 | - {fileID: 21300000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3} 78 | - {fileID: 21300000, guid: 98e8e1cf8dc7dbf469617c2e40c8a944, type: 3} 79 | - {fileID: 21300000, guid: 7f0db3cf23c93fc4eac01cb3a52388ee, type: 3} 80 | m_PackedSpriteNamesToIndex: 81 | - SlicedBackground 82 | - IconSnapToBottomBg 83 | - IconHide 84 | - IconSnapToBottom 85 | - IconClear 86 | - SlicedBackground3 87 | - SearchIcon 88 | - IconError 89 | - IconResizeVertialOnly 90 | - IconWarning 91 | - IconCollapse 92 | - IconInfo 93 | - SlicedBackground2 94 | - IconResizeAllDirections 95 | m_RenderDataMap: {} 96 | m_Tag: IngameDebugConsoleSpriteAtlas 97 | m_IsVariant: 0 98 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/IngameDebugConsoleSpriteAtlas.spriteatlas.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d829dcfc225f56440a2b10d9ac318aea 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 4343727234628468602 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/SearchIcon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/SearchIcon.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e04e6c970b950d946a782ea08e5f971d 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 1 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 1 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 1 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 32 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 0 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 1 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: [] 119 | outline: [] 120 | physicsShape: [] 121 | bones: [] 122 | spriteID: 5e97eb03825dee720800000000000000 123 | internalID: 0 124 | vertices: [] 125 | indices: 126 | edges: [] 127 | weights: [] 128 | secondaryTextures: [] 129 | nameFileIdTable: {} 130 | spritePackingTag: DebugLogUI 131 | pSDRemoveMatte: 1 132 | pSDShowRemoveMatteOption: 1 133 | userData: 134 | assetBundleName: 135 | assetBundleVariant: 136 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 066d3840badf4d24dba1d42b4c59b888 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 12, y: 12, z: 12, w: 12} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 1 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 1 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 1 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 32 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 0 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 1 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: [] 119 | outline: [] 120 | physicsShape: [] 121 | bones: [] 122 | spriteID: 5e97eb03825dee720800000000000000 123 | internalID: 0 124 | vertices: [] 125 | indices: 126 | edges: [] 127 | weights: [] 128 | secondaryTextures: [] 129 | nameFileIdTable: {} 130 | spritePackingTag: DebugLogUI 131 | pSDRemoveMatte: 1 132 | pSDShowRemoveMatteOption: 1 133 | userData: 134 | assetBundleName: 135 | assetBundleVariant: 136 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 98e8e1cf8dc7dbf469617c2e40c8a944 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 12, y: 12, z: 12, w: 12} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b3f0d976f6d6802479d6465d11b3aa68 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 5 33 | maxTextureSize: 32 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 13, y: 13, z: 13, w: 13} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 32 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 32 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 32 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: DebugLogUI 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/Unused.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f6caae32d463529478f2186f47c2e3fe 3 | folderAsset: yes 4 | timeCreated: 1466010601 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a97ca0b99ece2d94aaaf59653feb45dd 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: -3 33 | maxTextureSize: 64 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 64 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 64 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 64 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 33b115bf5efdfa04d8e2e0b70a6643cd 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: -3 33 | maxTextureSize: 64 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 64 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 64 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 64 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirkula/UnityIngameDebugConsole/5ce0bc1c254eddad92daa13159864dd21ccaf763/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: af17f91b4376d6a41a793c056c02dadc 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: -3 33 | maxTextureSize: 64 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 16 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 1 66 | cookieLightType: 1 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 64 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 0 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 64 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 0 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Android 94 | maxTextureSize: 64 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 0 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 1 120 | pSDShowRemoveMatteOption: 1 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/WebGL.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a091b43ce3618074d8cf2beb7e538a7d 3 | folderAsset: yes 4 | timeCreated: 1626377678 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/WebGL/IngameDebugConsole.jslib: -------------------------------------------------------------------------------- 1 | mergeInto( LibraryManager.library, 2 | { 3 | IngameDebugConsoleStartCopy: function( textToCopy ) 4 | { 5 | var textToCopyJS = UTF8ToString( textToCopy ); 6 | 7 | // Delete if element exist 8 | var copyTextButton = document.getElementById( 'DebugConsoleCopyButtonGL' ); 9 | if( !copyTextButton ) 10 | { 11 | copyTextButton = document.createElement( 'button' ); 12 | copyTextButton.setAttribute( 'id', 'DebugConsoleCopyButtonGL' ); 13 | copyTextButton.setAttribute( 'style','display:none; visibility:hidden;' ); 14 | } 15 | 16 | copyTextButton.onclick = function( event ) 17 | { 18 | // Credit: https://stackoverflow.com/a/30810322/2373034 19 | if( navigator.clipboard ) 20 | { 21 | navigator.clipboard.writeText( textToCopyJS ).then( function() { }, function( err ) 22 | { 23 | console.error( "Couldn't copy text to clipboard using clipboard.writeText: ", err ); 24 | } ); 25 | } 26 | else 27 | { 28 | var textArea = document.createElement( 'textarea' ); 29 | textArea.value = textToCopyJS; 30 | 31 | // Avoid scrolling to bottom 32 | textArea.style.top = "0"; 33 | textArea.style.left = "0"; 34 | textArea.style.position = "fixed"; 35 | 36 | document.body.appendChild( textArea ); 37 | textArea.focus(); 38 | textArea.select(); 39 | 40 | try 41 | { 42 | document.execCommand( 'copy' ); 43 | } 44 | catch( err ) 45 | { 46 | console.error( "Couldn't copy text to clipboard using document.execCommand", err ); 47 | } 48 | 49 | document.body.removeChild( textArea ); 50 | } 51 | }; 52 | 53 | document.body.appendChild( copyTextButton ); 54 | document.onmouseup = function() 55 | { 56 | document.onmouseup = null; 57 | copyTextButton.click(); 58 | document.body.removeChild( copyTextButton ); 59 | }; 60 | }, 61 | 62 | IngameDebugConsoleCancelCopy: function() 63 | { 64 | var copyTextButton = document.getElementById( 'DebugConsoleCopyButtonGL' ); 65 | if( copyTextButton ) 66 | document.body.removeChild( copyTextButton ); 67 | 68 | document.onmouseup = null; 69 | } 70 | } ); -------------------------------------------------------------------------------- /Plugins/IngameDebugConsole/WebGL/IngameDebugConsole.jslib.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aa23dd530e9f98c4cb0766404fc0e755 3 | timeCreated: 1626377683 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 2 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | isOverridable: 0 11 | platformData: 12 | data: 13 | first: 14 | Any: 15 | second: 16 | enabled: 0 17 | settings: {} 18 | data: 19 | first: 20 | Editor: Editor 21 | second: 22 | enabled: 0 23 | settings: 24 | DefaultValueInitialized: true 25 | data: 26 | first: 27 | Facebook: WebGL 28 | second: 29 | enabled: 1 30 | settings: {} 31 | data: 32 | first: 33 | WebGL: WebGL 34 | second: 35 | enabled: 1 36 | settings: {} 37 | userData: 38 | assetBundleName: 39 | assetBundleVariant: 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.yasirkula.ingamedebugconsole", 3 | "displayName": "In-game Debug Console", 4 | "version": "1.8.1", 5 | "documentationUrl": "https://github.com/yasirkula/UnityIngameDebugConsole", 6 | "changelogUrl": "https://github.com/yasirkula/UnityIngameDebugConsole/releases", 7 | "licensesUrl": "https://github.com/yasirkula/UnityIngameDebugConsole/blob/master/LICENSE.txt", 8 | "description": "This asset helps you see debug messages (logs, warnings, errors, exceptions) runtime in a build (also assertions in editor) and execute commands using its built-in console. It also supports logging logcat messages to the console on Android platform.", 9 | "hideInEditor": false 10 | } 11 | -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 51a4ad37344e1b14bae3ca6dc5294cb5 3 | PackageManifestImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------