├── .gitignore ├── Assets ├── UnityShell.meta └── UnityShell │ ├── Editor.meta │ └── Editor │ ├── Docs.meta │ ├── Docs │ ├── LicenseNotice.txt │ └── LicenseNotice.txt.meta │ ├── Mono.CSharp.3.5.dll │ ├── Mono.CSharp.3.5.dll.meta │ ├── Mono.CSharp.4.x.dll │ ├── Mono.CSharp.4.x.dll.meta │ ├── Scripts.meta │ └── Scripts │ ├── AutocompleteBox.cs │ ├── AutocompleteBox.cs.meta │ ├── ShellEvaluator.cs │ ├── ShellEvaluator.cs.meta │ ├── UnityShellEditorWindow.cs │ └── UnityShellEditorWindow.cs.meta ├── LICENSE ├── Packages └── manifest.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── NavMeshAreas.asset ├── NetworkManager.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── TagManager.asset ├── TimeManager.asset └── UnityConnectSettings.asset └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Tt]emp/ 3 | /[Oo]bj/ 4 | /[Bb]uild/ 5 | /[Bb]uilds/ 6 | /Assets/AssetStoreTools* 7 | 8 | # Visual Studio 2015 cache directory 9 | /.vs/ 10 | 11 | /.idea/ 12 | 13 | # Autogenerated VS/MD/Consulo solution and project files 14 | ExportedObj/ 15 | .consulo/ 16 | *.csproj 17 | *.unityproj 18 | *.sln 19 | *.suo 20 | *.tmp 21 | *.user 22 | *.userprefs 23 | *.pidb 24 | *.booproj 25 | *.svd 26 | *.pdb 27 | 28 | # Unity3D generated meta files 29 | *.pidb.meta 30 | 31 | # Unity3D Generated File On Crash Reports 32 | sysinfo.txt 33 | 34 | # Builds 35 | *.apk 36 | *.unitypackage 37 | 38 | 39 | /Assets/Plugins/Editor/JetBrains* 40 | -------------------------------------------------------------------------------- /Assets/UnityShell.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e64e35f7dc81e4506a9f6225296aaa10 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7e30b0811fed1473fa016ff9aa601b51 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Docs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b0b22c346073f43cf98c4d870740b5e8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Docs/LicenseNotice.txt: -------------------------------------------------------------------------------- 1 | Mono.CSharp.dll downloaded from https://github.com/rje/unishell/ -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Docs/LicenseNotice.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 055bbf50860204616ba1e76c97d1b731 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Mono.CSharp.3.5.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marijnz/unity-shell/0a51e925e9925a78571caba58c79d0c9840f6e3c/Assets/UnityShell/Editor/Mono.CSharp.3.5.dll -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Mono.CSharp.3.5.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 614a64fb414ae4feb9a05e857f78a25f 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | isPreloaded: 0 9 | isOverridable: 0 10 | platformData: 11 | - first: 12 | '': Any 13 | second: 14 | enabled: 0 15 | settings: 16 | Exclude Android: 1 17 | Exclude Editor: 0 18 | Exclude Linux: 1 19 | Exclude Linux64: 1 20 | Exclude LinuxUniversal: 1 21 | Exclude OSXUniversal: 1 22 | Exclude Win: 1 23 | Exclude Win64: 1 24 | Exclude iOS: 1 25 | - first: 26 | Android: Android 27 | second: 28 | enabled: 0 29 | settings: 30 | CPU: ARMv7 31 | - first: 32 | Any: 33 | second: 34 | enabled: 0 35 | settings: {} 36 | - first: 37 | Editor: Editor 38 | second: 39 | enabled: 1 40 | settings: 41 | CPU: AnyCPU 42 | DefaultValueInitialized: true 43 | OS: AnyOS 44 | - first: 45 | Facebook: Win 46 | second: 47 | enabled: 0 48 | settings: 49 | CPU: AnyCPU 50 | - first: 51 | Facebook: Win64 52 | second: 53 | enabled: 0 54 | settings: 55 | CPU: AnyCPU 56 | - first: 57 | Standalone: Linux 58 | second: 59 | enabled: 0 60 | settings: 61 | CPU: x86 62 | - first: 63 | Standalone: Linux64 64 | second: 65 | enabled: 0 66 | settings: 67 | CPU: x86_64 68 | - first: 69 | Standalone: OSXUniversal 70 | second: 71 | enabled: 0 72 | settings: 73 | CPU: AnyCPU 74 | - first: 75 | Standalone: Win 76 | second: 77 | enabled: 0 78 | settings: 79 | CPU: AnyCPU 80 | - first: 81 | Standalone: Win64 82 | second: 83 | enabled: 0 84 | settings: 85 | CPU: AnyCPU 86 | - first: 87 | Windows Store Apps: WindowsStoreApps 88 | second: 89 | enabled: 0 90 | settings: 91 | CPU: AnyCPU 92 | - first: 93 | iPhone: iOS 94 | second: 95 | enabled: 0 96 | settings: 97 | AddToEmbeddedBinaries: false 98 | CompileFlags: 99 | FrameworkDependencies: 100 | userData: 101 | assetBundleName: 102 | assetBundleVariant: 103 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Mono.CSharp.4.x.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marijnz/unity-shell/0a51e925e9925a78571caba58c79d0c9840f6e3c/Assets/UnityShell/Editor/Mono.CSharp.4.x.dll -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Mono.CSharp.4.x.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5fd2b1f32e4c146a98c1d945156dad89 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | isPreloaded: 0 9 | isOverridable: 0 10 | platformData: 11 | - first: 12 | '': Any 13 | second: 14 | enabled: 0 15 | settings: 16 | Exclude Android: 1 17 | Exclude Editor: 1 18 | Exclude Linux: 1 19 | Exclude Linux64: 1 20 | Exclude LinuxUniversal: 1 21 | Exclude OSXUniversal: 1 22 | Exclude Win: 1 23 | Exclude Win64: 1 24 | Exclude iOS: 1 25 | - first: 26 | Android: Android 27 | second: 28 | enabled: 0 29 | settings: 30 | CPU: ARMv7 31 | - first: 32 | Any: 33 | second: 34 | enabled: 0 35 | settings: {} 36 | - first: 37 | Editor: Editor 38 | second: 39 | enabled: 0 40 | settings: 41 | CPU: AnyCPU 42 | DefaultValueInitialized: true 43 | OS: AnyOS 44 | - first: 45 | Facebook: Win 46 | second: 47 | enabled: 0 48 | settings: 49 | CPU: AnyCPU 50 | - first: 51 | Facebook: Win64 52 | second: 53 | enabled: 0 54 | settings: 55 | CPU: AnyCPU 56 | - first: 57 | Standalone: Linux 58 | second: 59 | enabled: 0 60 | settings: 61 | CPU: x86 62 | - first: 63 | Standalone: Linux64 64 | second: 65 | enabled: 0 66 | settings: 67 | CPU: x86_64 68 | - first: 69 | Standalone: OSXUniversal 70 | second: 71 | enabled: 0 72 | settings: 73 | CPU: AnyCPU 74 | - first: 75 | Standalone: Win 76 | second: 77 | enabled: 0 78 | settings: 79 | CPU: AnyCPU 80 | - first: 81 | Standalone: Win64 82 | second: 83 | enabled: 0 84 | settings: 85 | CPU: AnyCPU 86 | - first: 87 | Windows Store Apps: WindowsStoreApps 88 | second: 89 | enabled: 0 90 | settings: 91 | CPU: AnyCPU 92 | - first: 93 | iPhone: iOS 94 | second: 95 | enabled: 0 96 | settings: 97 | AddToEmbeddedBinaries: false 98 | CompileFlags: 99 | FrameworkDependencies: 100 | userData: 101 | assetBundleName: 102 | assetBundleVariant: 103 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 142cf78554b8141e39f0fa7666fb5f41 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Scripts/AutocompleteBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEditor; 3 | using UnityEngine; 4 | 5 | namespace UnityShell 6 | { 7 | [Serializable] 8 | public class AutocompleteBox 9 | { 10 | private static class Styles 11 | { 12 | public const float resultHeight = 20f; 13 | public const float resultsBorderWidth = 2f; 14 | public const float resultsMargin = 15f; 15 | public const float resultsLabelOffset = 2f; 16 | 17 | public static readonly GUIStyle entryEven; 18 | public static readonly GUIStyle entryOdd; 19 | public static readonly GUIStyle labelStyle; 20 | public static readonly GUIStyle resultsBorderStyle; 21 | public static readonly GUIStyle sliderStyle; 22 | 23 | static Styles() 24 | { 25 | entryOdd = new GUIStyle("CN EntryBackOdd"); 26 | entryEven = new GUIStyle("CN EntryBackEven"); 27 | resultsBorderStyle = new GUIStyle("hostview"); 28 | 29 | labelStyle = new GUIStyle(EditorStyles.label) 30 | { 31 | alignment = TextAnchor.MiddleLeft, 32 | richText = true 33 | }; 34 | 35 | sliderStyle = new GUIStyle("MiniSliderVertical"); 36 | } 37 | } 38 | 39 | private const int HintToNextCompletionHeight = 7; 40 | 41 | public Action onConfirm; 42 | public int maxResults = 10; 43 | 44 | [SerializeField] 45 | public string[] results = new string[0]; 46 | 47 | [SerializeField] 48 | private Vector2 scrollPos; 49 | 50 | [SerializeField] 51 | private int selectedIndex = -1; 52 | 53 | [SerializeField] 54 | private int visualIndex = -1; 55 | 56 | private bool showResults; 57 | 58 | private string searchString; 59 | 60 | public void Clear() 61 | { 62 | searchString = ""; 63 | showResults = false; 64 | } 65 | 66 | public void OnGUI(string result, Rect rect) 67 | { 68 | if (results == null) 69 | { 70 | results = new string[0]; 71 | } 72 | 73 | if (result != searchString) 74 | { 75 | selectedIndex = 0; 76 | visualIndex = 0; 77 | showResults = true; 78 | } 79 | searchString = result; 80 | 81 | DrawResults(rect); 82 | } 83 | 84 | public void HandleEvents() 85 | { 86 | if (results.Length == 0) 87 | { 88 | return; 89 | } 90 | 91 | var current = Event.current; 92 | 93 | if (current.type == EventType.KeyDown) 94 | { 95 | switch (current.keyCode) 96 | { 97 | case KeyCode.Escape: 98 | showResults = false; 99 | break; 100 | case KeyCode.UpArrow: 101 | current.Use(); 102 | selectedIndex--; 103 | break; 104 | case KeyCode.DownArrow: 105 | current.Use(); 106 | selectedIndex++; 107 | break; 108 | case KeyCode.Return: 109 | if (selectedIndex >= 0) 110 | { 111 | current.Use(); 112 | OnConfirm(results[selectedIndex]); 113 | } 114 | break; 115 | } 116 | 117 | if (selectedIndex >= results.Length) 118 | { 119 | selectedIndex = 0; 120 | } 121 | else if (selectedIndex < 0) 122 | { 123 | selectedIndex = results.Length - 1; 124 | } 125 | } 126 | } 127 | 128 | private void DrawResults(Rect drawRect) 129 | { 130 | if (results.Length <= 0 || !showResults) 131 | { 132 | return; 133 | } 134 | 135 | var current = Event.current; 136 | drawRect.height = Styles.resultHeight * Mathf.Min(maxResults, results.Length); 137 | drawRect.x = Styles.resultsMargin; 138 | drawRect.width -= Styles.resultsMargin * 2; 139 | 140 | drawRect.height += Styles.resultsBorderWidth; 141 | 142 | var backgroundRect = drawRect; 143 | if (results.Length > maxResults) 144 | { 145 | backgroundRect.height += HintToNextCompletionHeight + Styles.resultsBorderWidth; 146 | } 147 | 148 | GUI.color = new Color(0.78f, 0.78f, 0.78f); 149 | GUI.Label(backgroundRect, "", Styles.resultsBorderStyle); 150 | GUI.color = Color.white; 151 | 152 | var elementRect = drawRect; 153 | elementRect.x += Styles.resultsBorderWidth; 154 | elementRect.width -= Styles.resultsBorderWidth * 2; 155 | elementRect.height = Styles.resultHeight; 156 | 157 | var scrollViewRect = drawRect; 158 | scrollViewRect.height = Styles.resultHeight * results.Length; 159 | 160 | var clipRect = drawRect; 161 | clipRect.height += HintToNextCompletionHeight; // to hint for more 162 | 163 | UpdateVisualIndex(clipRect); 164 | 165 | var posRect = new Rect(); 166 | posRect.yMin = selectedIndex * Styles.resultHeight; 167 | posRect.yMax = selectedIndex * Styles.resultHeight + Styles.resultHeight; 168 | 169 | GUI.BeginClip(clipRect); 170 | { 171 | elementRect.x = Styles.resultsBorderWidth; 172 | elementRect.y = 0; 173 | 174 | if (results.Length > maxResults) 175 | { 176 | elementRect.y = -visualIndex * Styles.resultHeight; 177 | 178 | var maxPos = GetTotalResultsShown(clipRect) * Styles.resultHeight - HintToNextCompletionHeight; 179 | 180 | if (-elementRect.y > maxPos) 181 | { 182 | elementRect.y = -maxPos; 183 | } 184 | } 185 | 186 | for (var i = 0; i < results.Length; i++) 187 | { 188 | if (current.type == EventType.Repaint) 189 | { 190 | var style = i % 2 == 0 ? Styles.entryOdd : Styles.entryEven; 191 | 192 | style.Draw(elementRect, false, false, i == selectedIndex, false); 193 | 194 | var labelRect = elementRect; 195 | labelRect.x += Styles.resultsLabelOffset; 196 | GUI.Label(labelRect, results[i], Styles.labelStyle); 197 | } 198 | elementRect.y += Styles.resultHeight; 199 | } 200 | 201 | if (results.Length > maxResults) 202 | { 203 | DrawScroll(clipRect); 204 | } 205 | } 206 | GUI.EndClip(); 207 | } 208 | 209 | private void DrawScroll(Rect clipRect) 210 | { 211 | var scrollRect = clipRect; 212 | scrollRect.x += scrollRect.width - 30; 213 | scrollRect.y = 0; 214 | 215 | var resultsShown = GetTotalResultsShown(clipRect); 216 | 217 | scrollRect.height = ((float) maxResults / resultsShown * clipRect.height); 218 | 219 | scrollRect.y = ((float) visualIndex / (resultsShown)) * (clipRect.height - scrollRect.height); 220 | 221 | GUI.Box(scrollRect, GUIContent.none, Styles.sliderStyle); 222 | } 223 | 224 | private int GetTotalResultsShown(Rect clipRect) 225 | { 226 | // Actual scrolling is a bit less as there's also the view itself in which is not scrolled, 227 | // when moving down initially, for example. 228 | int resultsShown = results.Length; 229 | resultsShown -= (int) (clipRect.height / Styles.resultHeight); 230 | return resultsShown; 231 | } 232 | 233 | private void UpdateVisualIndex(Rect clipRect) 234 | { 235 | var ySelectedPos = selectedIndex * Styles.resultHeight; 236 | var yVisualPos = visualIndex * Styles.resultHeight; 237 | 238 | var totalHeight = results.Length * Styles.resultHeight; 239 | 240 | var max = Mathf.Min(clipRect.height, clipRect.height); 241 | var min = Math.Min(0, totalHeight - ySelectedPos); 242 | 243 | var diffMax = ySelectedPos - (yVisualPos + max) + Styles.resultHeight; 244 | var diffMin = (yVisualPos + min) - ySelectedPos; 245 | 246 | if (diffMax > 0) 247 | { 248 | visualIndex += Mathf.CeilToInt(diffMax / Styles.resultHeight); 249 | } 250 | else if (diffMin > 0) 251 | { 252 | visualIndex -= Mathf.CeilToInt(diffMin / Styles.resultHeight); 253 | } 254 | } 255 | 256 | private void OnConfirm(string result) 257 | { 258 | if (onConfirm != null) 259 | { 260 | onConfirm(result); 261 | } 262 | RepaintFocusedWindow(); 263 | showResults = false; 264 | searchString = result; 265 | } 266 | 267 | private static void RepaintFocusedWindow() 268 | { 269 | if (EditorWindow.focusedWindow != null) 270 | { 271 | EditorWindow.focusedWindow.Repaint(); 272 | } 273 | } 274 | } 275 | } -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Scripts/AutocompleteBox.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66a37009f25cd4121be43e4deddc5cfa 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Scripts/ShellEvaluator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Threading; 4 | using Mono.CSharp; 5 | 6 | namespace UnityShell 7 | { 8 | [Serializable] 9 | public class ShellEvaluator 10 | { 11 | public string[] completions; 12 | 13 | private int handleCount; 14 | 15 | #if NET_4_6 || NET_STANDARD_2_0 16 | public Evaluator evaluator; 17 | #endif 18 | 19 | public ShellEvaluator() 20 | { 21 | new Thread(InitializeEvaluator).Start(); 22 | } 23 | 24 | private void InitializeEvaluator() 25 | { 26 | #if NET_4_6 || NET_STANDARD_2_0 27 | evaluator = new Evaluator(new CompilerContext(new CompilerSettings(), new ConsoleReportPrinter())); 28 | AppDomain.CurrentDomain.GetAssemblies().ToList().ForEach(asm => { 29 | try 30 | { 31 | evaluator.ReferenceAssembly(asm); 32 | } 33 | catch { } 34 | }); 35 | evaluator.Run("using UnityEngine; using UnityEditor; using System; using System.Collections.Generic;"); 36 | #else 37 | AppDomain.CurrentDomain.GetAssemblies().ToList().ForEach(asm => { 38 | try 39 | { 40 | Evaluator.ReferenceAssembly(asm); 41 | } 42 | catch { } 43 | }); 44 | Evaluator.Run("using UnityEngine; using UnityEditor; using System; using System.Collections.Generic;"); 45 | #endif 46 | } 47 | 48 | public void SetInput(string input) 49 | { 50 | #if NET_4_6 || NET_STANDARD_2_0 51 | if (evaluator == null) 52 | { 53 | return; 54 | } 55 | #endif 56 | 57 | handleCount++; 58 | new Thread(() => 59 | { 60 | int handle = handleCount; 61 | 62 | if (!string.IsNullOrEmpty(input)) 63 | { 64 | string prefix; 65 | #if NET_4_6 || NET_STANDARD_2_0 66 | var result = evaluator.GetCompletions(input, out prefix); 67 | #else 68 | var result = Evaluator.GetCompletions(input, out prefix); 69 | #endif 70 | 71 | // Avoid old threads overriding with old results 72 | if (handle == handleCount) 73 | { 74 | completions = result; 75 | if (completions == null) 76 | { 77 | return; 78 | } 79 | for (var i = 0; i < completions.Length; i++) 80 | { 81 | completions[i] = input + completions[i]; 82 | } 83 | 84 | if (completions.Length == 1 && completions[0].Trim() == input.Trim()) 85 | { 86 | completions = new string[0]; 87 | } 88 | } 89 | } 90 | else 91 | { 92 | completions = new string[0]; 93 | } 94 | }).Start(); 95 | } 96 | 97 | public object Evaluate(string command) 98 | { 99 | #if NET_4_6 || NET_STANDARD_2_0 100 | if (evaluator == null) 101 | { 102 | return null; 103 | } 104 | #endif 105 | 106 | if (!command.EndsWith(";")) 107 | { 108 | command += ";"; 109 | } 110 | 111 | #if NET_4_6 || NET_STANDARD_2_0 112 | var compilationResult = evaluator.Compile(command); 113 | #else 114 | var compilationResult = Evaluator.Compile(command); 115 | #endif 116 | if (compilationResult == null) 117 | { 118 | return "Compilation failed"; 119 | } 120 | 121 | object result = null; 122 | compilationResult(ref result); 123 | 124 | if (result == null) 125 | { 126 | result = "Executed code successfully"; 127 | } 128 | return result; 129 | } 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Scripts/ShellEvaluator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e9bf03b8c171411b96dee489271059e8 3 | timeCreated: 1529613031 -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Scripts/UnityShellEditorWindow.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | namespace UnityShell 7 | { 8 | public class UnityShellEditorWindow : EditorWindow 9 | { 10 | private static class Styles 11 | { 12 | public static readonly GUIStyle textAreaStyle; 13 | 14 | // Default background Color(0.76f, 0.76f, 0.76f) 15 | private static readonly Color bgColorLightSkin = new Color(0.87f, 0.87f, 0.87f); 16 | // Default background Color(0.22f, 0.22f, 0.22f) 17 | private static readonly Color bgColorDarkSkin = new Color(0.2f, 0.2f, 0.2f); 18 | // Default text Color(0.0f, 0.0f, 0.0f) 19 | private static readonly Color textColorLightSkin = new Color(0.0f, 0.0f, 0.0f); 20 | // Default text Color(0.706f, 0.706f, 0.706f) 21 | private static readonly Color textColorDarkSkin = new Color(0.706f, 0.706f, 0.706f); 22 | 23 | private static Texture2D _backgroundTexture; 24 | public static Texture2D backgroundTexture 25 | { 26 | get 27 | { 28 | if (_backgroundTexture == null) 29 | { 30 | _backgroundTexture = new Texture2D(1, 1, TextureFormat.RGBA32, false, true); 31 | _backgroundTexture.SetPixel(0, 0, EditorGUIUtility.isProSkin ? bgColorDarkSkin : bgColorLightSkin); 32 | _backgroundTexture.Apply(); 33 | } 34 | return _backgroundTexture; 35 | } 36 | } 37 | 38 | static Styles() 39 | { 40 | textAreaStyle = new GUIStyle(EditorStyles.textArea); 41 | textAreaStyle.padding = new RectOffset(); 42 | 43 | var style = textAreaStyle.focused; 44 | style.background = backgroundTexture; 45 | style.textColor = EditorGUIUtility.isProSkin ? textColorDarkSkin : textColorLightSkin; 46 | 47 | textAreaStyle.focused = style; 48 | textAreaStyle.active = style; 49 | textAreaStyle.onActive = style; 50 | textAreaStyle.hover = style; 51 | textAreaStyle.normal = style; 52 | textAreaStyle.onNormal = style; 53 | } 54 | } 55 | 56 | [MenuItem("Window/UnityShell #%u")] 57 | private static void CreateWindow() 58 | { 59 | GetWindow("UnityShell"); 60 | } 61 | 62 | private const string ConsoleTextAreaControlName = "ConsoleTextArea"; 63 | private const string CommandName = "command > "; 64 | 65 | private string text 66 | { 67 | get 68 | { 69 | return textEditor.text; 70 | } 71 | set 72 | { 73 | textEditor.text = value; 74 | } 75 | } 76 | 77 | [SerializeField] 78 | private AutocompleteBox autocompleteBox; 79 | 80 | [SerializeField] 81 | private ShellEvaluator shellEvaluator; 82 | 83 | [SerializeField] 84 | private Vector2 scrollPos = Vector2.zero; 85 | 86 | [SerializeField] 87 | private TextEditor textEditor; 88 | 89 | [SerializeField] 90 | private List inputHistory = new List(); 91 | private int positionInHistory; 92 | 93 | private bool requestMoveCursorToEnd; 94 | private bool requestFocusOnTextArea; 95 | private bool requestRevertNewLine; 96 | 97 | private string input = ""; 98 | private string lastWord = ""; 99 | private string savedInput; 100 | 101 | private Vector2 lastCursorPos; 102 | 103 | private void Awake() 104 | { 105 | ClearText(); 106 | requestFocusOnTextArea = true; 107 | 108 | shellEvaluator = new ShellEvaluator(); 109 | autocompleteBox = new AutocompleteBox(); 110 | } 111 | 112 | private void ClearText() 113 | { 114 | if (textEditor != null) 115 | { 116 | text = ""; 117 | } 118 | } 119 | 120 | private void OnEnable() 121 | { 122 | ScheduleMoveCursorToEnd(); 123 | autocompleteBox.onConfirm += OnAutocompleteConfirm; 124 | autocompleteBox.Clear(); 125 | } 126 | 127 | private void OnAutocompleteConfirm(string confirmedInput) 128 | { 129 | text = text.Substring(0, text.Length - lastWord.Length); 130 | text += confirmedInput; 131 | lastWord = confirmedInput; 132 | requestRevertNewLine = true; 133 | } 134 | 135 | private void OnInspectorUpdate() 136 | { 137 | Repaint(); 138 | } 139 | 140 | private void OnGUI() 141 | { 142 | textEditor = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl); 143 | if (text == "") 144 | { 145 | AppendStartCommand(); 146 | ScheduleMoveCursorToEnd(); 147 | } 148 | 149 | HandleInvalidTypePositions(); 150 | autocompleteBox.HandleEvents(); 151 | HandleHistory(); 152 | DoAutoComplete(); 153 | HandleRequests(); 154 | DrawAll(); 155 | } 156 | 157 | private void HandleHistory() 158 | { 159 | var current = Event.current; 160 | if (current.type == EventType.KeyDown) 161 | { 162 | var changed = false; 163 | if (current.keyCode == KeyCode.DownArrow) 164 | { 165 | positionInHistory++; 166 | changed = true; 167 | current.Use(); 168 | } 169 | if (current.keyCode == KeyCode.UpArrow) 170 | { 171 | positionInHistory--; 172 | changed = true; 173 | current.Use(); 174 | } 175 | 176 | if (changed) 177 | { 178 | if (savedInput == null) 179 | { 180 | savedInput = input; 181 | } 182 | 183 | if (positionInHistory < 0) 184 | { 185 | positionInHistory = 0; 186 | } 187 | else if (positionInHistory >= inputHistory.Count) 188 | { 189 | ReplaceCurrentCommand(savedInput); 190 | positionInHistory = inputHistory.Count; 191 | savedInput = null; 192 | } 193 | else 194 | { 195 | ReplaceCurrentCommand(inputHistory[positionInHistory]); 196 | } 197 | } 198 | } 199 | } 200 | 201 | private void ReplaceCurrentCommand(string replacement) 202 | { 203 | text = text.Substring(0, text.Length - input.Length); 204 | text += replacement; 205 | textEditor.MoveTextEnd(); 206 | } 207 | 208 | private void DoAutoComplete() 209 | { 210 | var newInput = GetInput(); 211 | if (newInput != null && input != newInput && !requestRevertNewLine) 212 | { 213 | input = newInput; 214 | 215 | lastWord = input; 216 | var lastWordIndex = input.LastIndexOfAny(new[] {'(', ' '}); 217 | if (lastWordIndex != -1) 218 | { 219 | lastWord = input.Substring(lastWordIndex + 1); 220 | } 221 | 222 | shellEvaluator.SetInput(lastWord); 223 | } 224 | } 225 | 226 | private string GetInput() 227 | { 228 | var commandStartIndex = text.LastIndexOf(CommandName, StringComparison.Ordinal); 229 | if (commandStartIndex != -1) 230 | { 231 | commandStartIndex += CommandName.Length; 232 | return text.Substring(commandStartIndex); 233 | } 234 | return null; 235 | } 236 | 237 | private void HandleRequests() 238 | { 239 | var current = Event.current; 240 | if (requestMoveCursorToEnd && current.type == EventType.Repaint) 241 | { 242 | textEditor.MoveTextEnd(); 243 | requestMoveCursorToEnd = false; 244 | Repaint(); 245 | } 246 | else if (focusedWindow == this && requestFocusOnTextArea) 247 | { 248 | GUI.FocusControl(ConsoleTextAreaControlName); 249 | requestFocusOnTextArea = false; 250 | Repaint(); 251 | } 252 | 253 | var cursorPos = textEditor.graphicalCursorPos; 254 | 255 | if (current.type == EventType.Repaint && cursorPos.y > lastCursorPos.y && requestRevertNewLine) 256 | { 257 | textEditor.Backspace(); 258 | textEditor.MoveTextEnd(); 259 | Repaint(); 260 | requestRevertNewLine = false; 261 | } 262 | 263 | lastCursorPos = cursorPos; 264 | } 265 | 266 | /// 267 | /// Ensures not about to type at an invalid position. 268 | /// 269 | private void HandleInvalidTypePositions() 270 | { 271 | var current = Event.current; 272 | 273 | if (current.isKey && !current.command && !current.control) 274 | { 275 | var lastIndexCommand = text.LastIndexOf(CommandName, StringComparison.Ordinal) + CommandName.Length; 276 | 277 | var cursorIndex = textEditor.cursorIndex; 278 | if (current.keyCode == KeyCode.Backspace) 279 | { 280 | cursorIndex--; 281 | } 282 | 283 | if (cursorIndex < lastIndexCommand) 284 | { 285 | ScheduleMoveCursorToEnd(); 286 | current.Use(); 287 | } 288 | } 289 | } 290 | 291 | private void DrawAll() 292 | { 293 | GUI.DrawTexture(new Rect(0, 0, maxSize.x, maxSize.y), Styles.backgroundTexture, ScaleMode.StretchToFill); 294 | EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); 295 | { 296 | GUILayout.FlexibleSpace(); 297 | 298 | if (GUILayout.Button("Clear", EditorStyles.toolbarButton)) 299 | { 300 | ClearText(); 301 | } 302 | } 303 | EditorGUILayout.EndHorizontal(); 304 | 305 | scrollPos = EditorGUILayout.BeginScrollView(scrollPos); 306 | { 307 | DrawConsole(); 308 | } 309 | EditorGUILayout.EndScrollView(); 310 | 311 | autocompleteBox.results = shellEvaluator.completions; 312 | 313 | var pos = textEditor.graphicalCursorPos; 314 | var rect = new Rect(pos.x, pos.y, 300, 200); 315 | rect.y += 34; 316 | autocompleteBox.OnGUI(lastWord, rect); 317 | } 318 | 319 | private void DrawConsole() 320 | { 321 | var current = Event.current; 322 | 323 | if (current.type == EventType.KeyDown) 324 | { 325 | ScrollDown(); 326 | 327 | if (current.keyCode == KeyCode.Return && !current.shift) 328 | { 329 | textEditor.MoveTextEnd(); 330 | try 331 | { 332 | var result = shellEvaluator.Evaluate(input); 333 | Append(result); 334 | inputHistory.Add(input); 335 | positionInHistory = inputHistory.Count; 336 | } 337 | catch (Exception e) 338 | { 339 | Debug.LogException(e); 340 | Append(e.Message); 341 | } 342 | 343 | AppendStartCommand(); 344 | ScheduleMoveCursorToEnd(); 345 | 346 | current.Use(); 347 | } 348 | } 349 | 350 | GUI.SetNextControlName(ConsoleTextAreaControlName); 351 | GUILayout.TextArea(text, Styles.textAreaStyle, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); 352 | } 353 | 354 | private void ScrollDown() 355 | { 356 | scrollPos.y = float.MaxValue; 357 | } 358 | 359 | private void AppendStartCommand() 360 | { 361 | text += CommandName; 362 | } 363 | 364 | private void ScheduleMoveCursorToEnd() 365 | { 366 | requestMoveCursorToEnd = true; 367 | ScrollDown(); 368 | } 369 | 370 | private void Append(object result) 371 | { 372 | text += "\n" + result + "\n"; 373 | } 374 | } 375 | } 376 | 377 | 378 | 379 | 380 | -------------------------------------------------------------------------------- /Assets/UnityShell/Editor/Scripts/UnityShellEditorWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b14229ddeb39b479e8ce887f7d5a27f6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Marijn Zwemmer 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 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | } 4 | } 5 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 1024 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_AmbisonicDecoderPlugin: 16 | m_DisableAudio: 0 17 | m_VirtualizeEffects: 1 18 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 1 23 | m_ClothInterCollisionSettingsToggle: 0 24 | m_ContactPairsMode: 0 25 | m_BroadphaseType: 0 26 | m_WorldBounds: 27 | m_Center: {x: 0, y: 0, z: 0} 28 | m_Extent: {x: 250, y: 250, z: 250} 29 | m_WorldSubdivisions: 8 30 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 0 9 | path: Assets/Scenes/SampleScene.unity 10 | guid: 2cda990e2423bbf4892e6590ba056729 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 2 10 | m_DefaultBehaviorMode: 1 11 | m_SpritePackerMode: 4 12 | m_SpritePackerPaddingPower: 1 13 | m_EtcTextureCompressorBehavior: 1 14 | m_EtcTextureFastCompressor: 1 15 | m_EtcTextureNormalCompressor: 2 16 | m_EtcTextureBestCompressor: 4 17 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd 18 | m_ProjectGenerationRootNamespace: 19 | m_UserGeneratedProjectSuffix: 20 | m_CollabEditorSettings: 21 | inProgressEnabled: 1 22 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 12 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 34 | m_PreloadedShaders: [] 35 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 36 | type: 0} 37 | m_CustomRenderPipeline: {fileID: 0} 38 | m_TransparencySortMode: 0 39 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 40 | m_DefaultRenderingPath: 1 41 | m_DefaultMobileRenderingPath: 1 42 | m_TierSettings: [] 43 | m_LightmapStripping: 0 44 | m_FogStripping: 0 45 | m_InstancingStripping: 0 46 | m_LightmapKeepPlain: 1 47 | m_LightmapKeepDirCombined: 1 48 | m_LightmapKeepDynamicPlain: 1 49 | m_LightmapKeepDynamicDirCombined: 1 50 | m_LightmapKeepShadowMask: 1 51 | m_LightmapKeepSubtractive: 1 52 | m_FogKeepLinear: 1 53 | m_FogKeepExp: 1 54 | m_FogKeepExp2: 1 55 | m_AlbedoSwatchInfos: [] 56 | m_LightsUseLinearIntensity: 0 57 | m_LightsUseColorTemperature: 0 58 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 3 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_AutoSimulation: 1 23 | m_QueriesHitTriggers: 1 24 | m_QueriesStartInColliders: 1 25 | m_ChangeStopsCallbacks: 0 26 | m_CallbacksOnDisable: 1 27 | m_AutoSyncTransforms: 1 28 | m_AlwaysShowColliders: 0 29 | m_ShowColliderSleep: 1 30 | m_ShowColliderContacts: 0 31 | m_ShowColliderAABB: 0 32 | m_ContactArrowScale: 0.2 33 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 34 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 35 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 36 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 37 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 38 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | m_DefaultList: 7 | - type: 8 | m_NativeTypeID: 20 9 | m_ManagedTypePPtr: {fileID: 0} 10 | m_ManagedTypeFallback: 11 | defaultPresets: 12 | - m_Preset: {fileID: 2655988077585873504, guid: bfcfc320427f8224bbb7a96f3d3aebad, 13 | type: 2} 14 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 15 7 | productGUID: 004a832974c8c4b23b75ea0426f6c255 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: unity-shell 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | tizenShowActivityIndicatorOnLoading: -1 56 | iosAppInBackgroundBehavior: 0 57 | displayResolutionDialog: 1 58 | iosAllowHTTPDownload: 1 59 | allowedAutorotateToPortrait: 1 60 | allowedAutorotateToPortraitUpsideDown: 1 61 | allowedAutorotateToLandscapeRight: 1 62 | allowedAutorotateToLandscapeLeft: 1 63 | useOSAutorotation: 1 64 | use32BitDisplayBuffer: 1 65 | preserveFramebufferAlpha: 0 66 | disableDepthAndStencilBuffers: 0 67 | androidBlitType: 0 68 | defaultIsNativeResolution: 1 69 | macRetinaSupport: 1 70 | runInBackground: 1 71 | captureSingleScreen: 0 72 | muteOtherAudioSources: 0 73 | Prepare IOS For Recording: 0 74 | Force IOS Speakers When Recording: 0 75 | deferSystemGesturesMode: 0 76 | hideHomeButton: 0 77 | submitAnalytics: 1 78 | usePlayerLog: 1 79 | bakeCollisionMeshes: 0 80 | forceSingleInstance: 0 81 | resizableWindow: 0 82 | useMacAppStoreValidation: 0 83 | macAppStoreCategory: public.app-category.games 84 | gpuSkinning: 0 85 | graphicsJobs: 0 86 | xboxPIXTextureCapture: 0 87 | xboxEnableAvatar: 0 88 | xboxEnableKinect: 0 89 | xboxEnableKinectAutoTracking: 0 90 | xboxEnableFitness: 0 91 | visibleInBackground: 1 92 | allowFullscreenSwitch: 1 93 | graphicsJobMode: 0 94 | fullscreenMode: 1 95 | xboxSpeechDB: 0 96 | xboxEnableHeadOrientation: 0 97 | xboxEnableGuest: 0 98 | xboxEnablePIXSampling: 0 99 | metalFramebufferOnly: 0 100 | n3dsDisableStereoscopicView: 0 101 | n3dsEnableSharedListOpt: 1 102 | n3dsEnableVSync: 0 103 | xboxOneResolution: 0 104 | xboxOneSResolution: 0 105 | xboxOneXResolution: 3 106 | xboxOneMonoLoggingLevel: 0 107 | xboxOneLoggingLevel: 1 108 | xboxOneDisableEsram: 0 109 | xboxOnePresentImmediateThreshold: 0 110 | switchQueueCommandMemory: 0 111 | videoMemoryForVertexBuffers: 0 112 | psp2PowerMode: 0 113 | psp2AcquireBGM: 1 114 | m_SupportedAspectRatios: 115 | 4:3: 1 116 | 5:4: 1 117 | 16:10: 1 118 | 16:9: 1 119 | Others: 1 120 | bundleVersion: 0.1 121 | preloadedAssets: [] 122 | metroInputSource: 0 123 | wsaTransparentSwapchain: 0 124 | m_HolographicPauseOnTrackingLoss: 1 125 | xboxOneDisableKinectGpuReservation: 0 126 | xboxOneEnable7thCore: 0 127 | vrSettings: 128 | cardboard: 129 | depthFormat: 0 130 | enableTransitionView: 0 131 | daydream: 132 | depthFormat: 0 133 | useSustainedPerformanceMode: 0 134 | enableVideoLayer: 0 135 | useProtectedVideoMemory: 0 136 | minimumSupportedHeadTracking: 0 137 | maximumSupportedHeadTracking: 1 138 | hololens: 139 | depthFormat: 1 140 | depthBufferSharingEnabled: 0 141 | enable360StereoCapture: 0 142 | oculus: 143 | sharedDepthBuffer: 0 144 | dashSupport: 0 145 | protectGraphicsMemory: 0 146 | useHDRDisplay: 0 147 | m_ColorGamuts: 00000000 148 | targetPixelDensity: 30 149 | resolutionScalingMode: 0 150 | androidSupportedAspectRatio: 1 151 | androidMaxAspectRatio: 2.1 152 | applicationIdentifier: 153 | Standalone: com.Company.ProductName 154 | buildNumber: {} 155 | AndroidBundleVersionCode: 1 156 | AndroidMinSdkVersion: 16 157 | AndroidTargetSdkVersion: 0 158 | AndroidPreferredInstallLocation: 1 159 | aotOptions: 160 | stripEngineCode: 1 161 | iPhoneStrippingLevel: 0 162 | iPhoneScriptCallOptimization: 0 163 | ForceInternetPermission: 0 164 | ForceSDCardPermission: 0 165 | CreateWallpaper: 0 166 | APKExpansionFiles: 0 167 | keepLoadedShadersAlive: 0 168 | StripUnusedMeshComponents: 1 169 | VertexChannelCompressionMask: 4054 170 | iPhoneSdkVersion: 988 171 | iOSTargetOSVersionString: 8.0 172 | tvOSSdkVersion: 0 173 | tvOSRequireExtendedGameController: 0 174 | tvOSTargetOSVersionString: 9.0 175 | uIPrerenderedIcon: 0 176 | uIRequiresPersistentWiFi: 0 177 | uIRequiresFullScreen: 1 178 | uIStatusBarHidden: 1 179 | uIExitOnSuspend: 0 180 | uIStatusBarStyle: 0 181 | iPhoneSplashScreen: {fileID: 0} 182 | iPhoneHighResSplashScreen: {fileID: 0} 183 | iPhoneTallHighResSplashScreen: {fileID: 0} 184 | iPhone47inSplashScreen: {fileID: 0} 185 | iPhone55inPortraitSplashScreen: {fileID: 0} 186 | iPhone55inLandscapeSplashScreen: {fileID: 0} 187 | iPhone58inPortraitSplashScreen: {fileID: 0} 188 | iPhone58inLandscapeSplashScreen: {fileID: 0} 189 | iPadPortraitSplashScreen: {fileID: 0} 190 | iPadHighResPortraitSplashScreen: {fileID: 0} 191 | iPadLandscapeSplashScreen: {fileID: 0} 192 | iPadHighResLandscapeSplashScreen: {fileID: 0} 193 | appleTVSplashScreen: {fileID: 0} 194 | appleTVSplashScreen2x: {fileID: 0} 195 | tvOSSmallIconLayers: [] 196 | tvOSSmallIconLayers2x: [] 197 | tvOSLargeIconLayers: [] 198 | tvOSLargeIconLayers2x: [] 199 | tvOSTopShelfImageLayers: [] 200 | tvOSTopShelfImageLayers2x: [] 201 | tvOSTopShelfImageWideLayers: [] 202 | tvOSTopShelfImageWideLayers2x: [] 203 | iOSLaunchScreenType: 0 204 | iOSLaunchScreenPortrait: {fileID: 0} 205 | iOSLaunchScreenLandscape: {fileID: 0} 206 | iOSLaunchScreenBackgroundColor: 207 | serializedVersion: 2 208 | rgba: 0 209 | iOSLaunchScreenFillPct: 100 210 | iOSLaunchScreenSize: 100 211 | iOSLaunchScreenCustomXibPath: 212 | iOSLaunchScreeniPadType: 0 213 | iOSLaunchScreeniPadImage: {fileID: 0} 214 | iOSLaunchScreeniPadBackgroundColor: 215 | serializedVersion: 2 216 | rgba: 0 217 | iOSLaunchScreeniPadFillPct: 100 218 | iOSLaunchScreeniPadSize: 100 219 | iOSLaunchScreeniPadCustomXibPath: 220 | iOSUseLaunchScreenStoryboard: 0 221 | iOSLaunchScreenCustomStoryboardPath: 222 | iOSDeviceRequirements: [] 223 | iOSURLSchemes: [] 224 | iOSBackgroundModes: 0 225 | iOSMetalForceHardShadows: 0 226 | metalEditorSupport: 1 227 | metalAPIValidation: 1 228 | iOSRenderExtraFrameOnPause: 0 229 | appleDeveloperTeamID: 230 | iOSManualSigningProvisioningProfileID: 231 | tvOSManualSigningProvisioningProfileID: 232 | iOSManualSigningProvisioningProfileType: 0 233 | tvOSManualSigningProvisioningProfileType: 0 234 | appleEnableAutomaticSigning: 0 235 | iOSRequireARKit: 0 236 | appleEnableProMotion: 0 237 | clonedFromGUID: fe97a795c6621624a9fc94fd2443b1a8 238 | templatePackageId: com.unity.template.2d@1.0.0 239 | templateDefaultScene: Assets/Scenes/SampleScene.unity 240 | AndroidTargetArchitectures: 5 241 | AndroidSplashScreenScale: 0 242 | androidSplashScreen: {fileID: 0} 243 | AndroidKeystoreName: 244 | AndroidKeyaliasName: 245 | AndroidTVCompatibility: 1 246 | AndroidIsGame: 1 247 | AndroidEnableTango: 0 248 | androidEnableBanner: 1 249 | androidUseLowAccuracyLocation: 0 250 | m_AndroidBanners: 251 | - width: 320 252 | height: 180 253 | banner: {fileID: 0} 254 | androidGamepadSupportLevel: 0 255 | resolutionDialogBanner: {fileID: 0} 256 | m_BuildTargetIcons: [] 257 | m_BuildTargetPlatformIcons: [] 258 | m_BuildTargetBatching: 259 | - m_BuildTarget: Standalone 260 | m_StaticBatching: 1 261 | m_DynamicBatching: 0 262 | - m_BuildTarget: iPhone 263 | m_StaticBatching: 1 264 | m_DynamicBatching: 0 265 | - m_BuildTarget: tvOS 266 | m_StaticBatching: 1 267 | m_DynamicBatching: 0 268 | - m_BuildTarget: Android 269 | m_StaticBatching: 1 270 | m_DynamicBatching: 0 271 | - m_BuildTarget: WebGL 272 | m_StaticBatching: 0 273 | m_DynamicBatching: 0 274 | m_BuildTargetGraphicsAPIs: 275 | - m_BuildTarget: iOSSupport 276 | m_APIs: 10000000 277 | m_Automatic: 1 278 | - m_BuildTarget: AppleTVSupport 279 | m_APIs: 10000000 280 | m_Automatic: 0 281 | - m_BuildTarget: AndroidPlayer 282 | m_APIs: 0b00000015000000 283 | m_Automatic: 1 284 | - m_BuildTarget: WebGLSupport 285 | m_APIs: 0b000000 286 | m_Automatic: 1 287 | m_BuildTargetVRSettings: [] 288 | m_BuildTargetEnableVuforiaSettings: [] 289 | openGLRequireES31: 0 290 | openGLRequireES31AEP: 0 291 | m_TemplateCustomTags: {} 292 | mobileMTRendering: 293 | Android: 1 294 | iPhone: 1 295 | tvOS: 1 296 | m_BuildTargetGroupLightmapEncodingQuality: [] 297 | playModeTestRunnerEnabled: 0 298 | runPlayModeTestAsEditModeTest: 0 299 | actionOnDotNetUnhandledException: 1 300 | enableInternalProfiler: 0 301 | logObjCUncaughtExceptions: 1 302 | enableCrashReportAPI: 0 303 | cameraUsageDescription: 304 | locationUsageDescription: 305 | microphoneUsageDescription: 306 | switchNetLibKey: 307 | switchSocketMemoryPoolSize: 6144 308 | switchSocketAllocatorPoolSize: 128 309 | switchSocketConcurrencyLimit: 14 310 | switchScreenResolutionBehavior: 2 311 | switchUseCPUProfiler: 0 312 | switchApplicationID: 0x01004b9000490000 313 | switchNSODependencies: 314 | switchTitleNames_0: 315 | switchTitleNames_1: 316 | switchTitleNames_2: 317 | switchTitleNames_3: 318 | switchTitleNames_4: 319 | switchTitleNames_5: 320 | switchTitleNames_6: 321 | switchTitleNames_7: 322 | switchTitleNames_8: 323 | switchTitleNames_9: 324 | switchTitleNames_10: 325 | switchTitleNames_11: 326 | switchTitleNames_12: 327 | switchTitleNames_13: 328 | switchTitleNames_14: 329 | switchPublisherNames_0: 330 | switchPublisherNames_1: 331 | switchPublisherNames_2: 332 | switchPublisherNames_3: 333 | switchPublisherNames_4: 334 | switchPublisherNames_5: 335 | switchPublisherNames_6: 336 | switchPublisherNames_7: 337 | switchPublisherNames_8: 338 | switchPublisherNames_9: 339 | switchPublisherNames_10: 340 | switchPublisherNames_11: 341 | switchPublisherNames_12: 342 | switchPublisherNames_13: 343 | switchPublisherNames_14: 344 | switchIcons_0: {fileID: 0} 345 | switchIcons_1: {fileID: 0} 346 | switchIcons_2: {fileID: 0} 347 | switchIcons_3: {fileID: 0} 348 | switchIcons_4: {fileID: 0} 349 | switchIcons_5: {fileID: 0} 350 | switchIcons_6: {fileID: 0} 351 | switchIcons_7: {fileID: 0} 352 | switchIcons_8: {fileID: 0} 353 | switchIcons_9: {fileID: 0} 354 | switchIcons_10: {fileID: 0} 355 | switchIcons_11: {fileID: 0} 356 | switchIcons_12: {fileID: 0} 357 | switchIcons_13: {fileID: 0} 358 | switchIcons_14: {fileID: 0} 359 | switchSmallIcons_0: {fileID: 0} 360 | switchSmallIcons_1: {fileID: 0} 361 | switchSmallIcons_2: {fileID: 0} 362 | switchSmallIcons_3: {fileID: 0} 363 | switchSmallIcons_4: {fileID: 0} 364 | switchSmallIcons_5: {fileID: 0} 365 | switchSmallIcons_6: {fileID: 0} 366 | switchSmallIcons_7: {fileID: 0} 367 | switchSmallIcons_8: {fileID: 0} 368 | switchSmallIcons_9: {fileID: 0} 369 | switchSmallIcons_10: {fileID: 0} 370 | switchSmallIcons_11: {fileID: 0} 371 | switchSmallIcons_12: {fileID: 0} 372 | switchSmallIcons_13: {fileID: 0} 373 | switchSmallIcons_14: {fileID: 0} 374 | switchManualHTML: 375 | switchAccessibleURLs: 376 | switchLegalInformation: 377 | switchMainThreadStackSize: 1048576 378 | switchPresenceGroupId: 379 | switchLogoHandling: 0 380 | switchReleaseVersion: 0 381 | switchDisplayVersion: 1.0.0 382 | switchStartupUserAccount: 0 383 | switchTouchScreenUsage: 0 384 | switchSupportedLanguagesMask: 0 385 | switchLogoType: 0 386 | switchApplicationErrorCodeCategory: 387 | switchUserAccountSaveDataSize: 0 388 | switchUserAccountSaveDataJournalSize: 0 389 | switchApplicationAttribute: 0 390 | switchCardSpecSize: -1 391 | switchCardSpecClock: -1 392 | switchRatingsMask: 0 393 | switchRatingsInt_0: 0 394 | switchRatingsInt_1: 0 395 | switchRatingsInt_2: 0 396 | switchRatingsInt_3: 0 397 | switchRatingsInt_4: 0 398 | switchRatingsInt_5: 0 399 | switchRatingsInt_6: 0 400 | switchRatingsInt_7: 0 401 | switchRatingsInt_8: 0 402 | switchRatingsInt_9: 0 403 | switchRatingsInt_10: 0 404 | switchRatingsInt_11: 0 405 | switchLocalCommunicationIds_0: 406 | switchLocalCommunicationIds_1: 407 | switchLocalCommunicationIds_2: 408 | switchLocalCommunicationIds_3: 409 | switchLocalCommunicationIds_4: 410 | switchLocalCommunicationIds_5: 411 | switchLocalCommunicationIds_6: 412 | switchLocalCommunicationIds_7: 413 | switchParentalControl: 0 414 | switchAllowsScreenshot: 1 415 | switchAllowsVideoCapturing: 1 416 | switchAllowsRuntimeAddOnContentInstall: 0 417 | switchDataLossConfirmation: 0 418 | switchSupportedNpadStyles: 3 419 | switchSocketConfigEnabled: 0 420 | switchTcpInitialSendBufferSize: 32 421 | switchTcpInitialReceiveBufferSize: 64 422 | switchTcpAutoSendBufferSizeMax: 256 423 | switchTcpAutoReceiveBufferSizeMax: 256 424 | switchUdpSendBufferSize: 9 425 | switchUdpReceiveBufferSize: 42 426 | switchSocketBufferEfficiency: 4 427 | switchSocketInitializeEnabled: 1 428 | switchNetworkInterfaceManagerInitializeEnabled: 1 429 | switchPlayerConnectionEnabled: 1 430 | ps4NPAgeRating: 12 431 | ps4NPTitleSecret: 432 | ps4NPTrophyPackPath: 433 | ps4ParentalLevel: 11 434 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 435 | ps4Category: 0 436 | ps4MasterVersion: 01.00 437 | ps4AppVersion: 01.00 438 | ps4AppType: 0 439 | ps4ParamSfxPath: 440 | ps4VideoOutPixelFormat: 0 441 | ps4VideoOutInitialWidth: 1920 442 | ps4VideoOutBaseModeInitialWidth: 1920 443 | ps4VideoOutReprojectionRate: 60 444 | ps4PronunciationXMLPath: 445 | ps4PronunciationSIGPath: 446 | ps4BackgroundImagePath: 447 | ps4StartupImagePath: 448 | ps4StartupImagesFolder: 449 | ps4IconImagesFolder: 450 | ps4SaveDataImagePath: 451 | ps4SdkOverride: 452 | ps4BGMPath: 453 | ps4ShareFilePath: 454 | ps4ShareOverlayImagePath: 455 | ps4PrivacyGuardImagePath: 456 | ps4NPtitleDatPath: 457 | ps4RemotePlayKeyAssignment: -1 458 | ps4RemotePlayKeyMappingDir: 459 | ps4PlayTogetherPlayerCount: 0 460 | ps4EnterButtonAssignment: 1 461 | ps4ApplicationParam1: 0 462 | ps4ApplicationParam2: 0 463 | ps4ApplicationParam3: 0 464 | ps4ApplicationParam4: 0 465 | ps4DownloadDataSize: 0 466 | ps4GarlicHeapSize: 2048 467 | ps4ProGarlicHeapSize: 2560 468 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 469 | ps4pnSessions: 1 470 | ps4pnPresence: 1 471 | ps4pnFriends: 1 472 | ps4pnGameCustomData: 1 473 | playerPrefsSupport: 0 474 | enableApplicationExit: 0 475 | restrictedAudioUsageRights: 0 476 | ps4UseResolutionFallback: 0 477 | ps4ReprojectionSupport: 0 478 | ps4UseAudio3dBackend: 0 479 | ps4SocialScreenEnabled: 0 480 | ps4ScriptOptimizationLevel: 0 481 | ps4Audio3dVirtualSpeakerCount: 14 482 | ps4attribCpuUsage: 0 483 | ps4PatchPkgPath: 484 | ps4PatchLatestPkgPath: 485 | ps4PatchChangeinfoPath: 486 | ps4PatchDayOne: 0 487 | ps4attribUserManagement: 0 488 | ps4attribMoveSupport: 0 489 | ps4attrib3DSupport: 0 490 | ps4attribShareSupport: 0 491 | ps4attribExclusiveVR: 0 492 | ps4disableAutoHideSplash: 0 493 | ps4videoRecordingFeaturesUsed: 0 494 | ps4contentSearchFeaturesUsed: 0 495 | ps4attribEyeToEyeDistanceSettingVR: 0 496 | ps4IncludedModules: [] 497 | monoEnv: 498 | psp2Splashimage: {fileID: 0} 499 | psp2NPTrophyPackPath: 500 | psp2NPSupportGBMorGJP: 0 501 | psp2NPAgeRating: 12 502 | psp2NPTitleDatPath: 503 | psp2NPCommsID: 504 | psp2NPCommunicationsID: 505 | psp2NPCommsPassphrase: 506 | psp2NPCommsSig: 507 | psp2ParamSfxPath: 508 | psp2ManualPath: 509 | psp2LiveAreaGatePath: 510 | psp2LiveAreaBackroundPath: 511 | psp2LiveAreaPath: 512 | psp2LiveAreaTrialPath: 513 | psp2PatchChangeInfoPath: 514 | psp2PatchOriginalPackage: 515 | psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui 516 | psp2KeystoneFile: 517 | psp2MemoryExpansionMode: 0 518 | psp2DRMType: 0 519 | psp2StorageType: 0 520 | psp2MediaCapacity: 0 521 | psp2DLCConfigPath: 522 | psp2ThumbnailPath: 523 | psp2BackgroundPath: 524 | psp2SoundPath: 525 | psp2TrophyCommId: 526 | psp2TrophyPackagePath: 527 | psp2PackagedResourcesPath: 528 | psp2SaveDataQuota: 10240 529 | psp2ParentalLevel: 1 530 | psp2ShortTitle: Not Set 531 | psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF 532 | psp2Category: 0 533 | psp2MasterVersion: 01.00 534 | psp2AppVersion: 01.00 535 | psp2TVBootMode: 0 536 | psp2EnterButtonAssignment: 2 537 | psp2TVDisableEmu: 0 538 | psp2AllowTwitterDialog: 1 539 | psp2Upgradable: 0 540 | psp2HealthWarning: 0 541 | psp2UseLibLocation: 0 542 | psp2InfoBarOnStartup: 0 543 | psp2InfoBarColor: 0 544 | psp2ScriptOptimizationLevel: 0 545 | splashScreenBackgroundSourceLandscape: {fileID: 0} 546 | splashScreenBackgroundSourcePortrait: {fileID: 0} 547 | spritePackerPolicy: 548 | webGLMemorySize: 256 549 | webGLExceptionSupport: 1 550 | webGLNameFilesAsHashes: 0 551 | webGLDataCaching: 0 552 | webGLDebugSymbols: 0 553 | webGLEmscriptenArgs: 554 | webGLModulesDirectory: 555 | webGLTemplate: APPLICATION:Default 556 | webGLAnalyzeBuildSize: 0 557 | webGLUseEmbeddedResources: 0 558 | webGLCompressionFormat: 1 559 | webGLLinkerTarget: 0 560 | scriptingDefineSymbols: {} 561 | platformArchitecture: {} 562 | scriptingBackend: {} 563 | il2cppCompilerConfiguration: {} 564 | incrementalIl2cppBuild: {} 565 | allowUnsafeCode: 0 566 | additionalIl2CppArgs: 567 | scriptingRuntimeVersion: 0 568 | apiCompatibilityLevelPerPlatform: {} 569 | m_RenderingPath: 1 570 | m_MobileRenderingPath: 1 571 | metroPackageName: Template_2D 572 | metroPackageVersion: 573 | metroCertificatePath: 574 | metroCertificatePassword: 575 | metroCertificateSubject: 576 | metroCertificateIssuer: 577 | metroCertificateNotAfter: 0000000000000000 578 | metroApplicationDescription: Template_2D 579 | wsaImages: {} 580 | metroTileShortName: 581 | metroCommandLineArgsFile: 582 | metroTileShowName: 0 583 | metroMediumTileShowName: 0 584 | metroLargeTileShowName: 0 585 | metroWideTileShowName: 0 586 | metroDefaultTileSize: 1 587 | metroTileForegroundText: 2 588 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 589 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 590 | a: 1} 591 | metroSplashScreenUseBackgroundColor: 0 592 | platformCapabilities: {} 593 | metroFTAName: 594 | metroFTAFileTypes: [] 595 | metroProtocolName: 596 | metroCompilationOverrides: 1 597 | tizenProductDescription: 598 | tizenProductURL: 599 | tizenSigningProfileName: 600 | tizenGPSPermissions: 0 601 | tizenMicrophonePermissions: 0 602 | tizenDeploymentTarget: 603 | tizenDeploymentTargetType: -1 604 | tizenMinOSVersion: 1 605 | n3dsUseExtSaveData: 0 606 | n3dsCompressStaticMem: 1 607 | n3dsExtSaveDataNumber: 0x12345 608 | n3dsStackSize: 131072 609 | n3dsTargetPlatform: 2 610 | n3dsRegion: 7 611 | n3dsMediaSize: 0 612 | n3dsLogoStyle: 3 613 | n3dsTitle: GameName 614 | n3dsProductCode: 615 | n3dsApplicationId: 0xFF3FF 616 | XboxOneProductId: 617 | XboxOneUpdateKey: 618 | XboxOneSandboxId: 619 | XboxOneContentId: 620 | XboxOneTitleId: 621 | XboxOneSCId: 622 | XboxOneGameOsOverridePath: 623 | XboxOnePackagingOverridePath: 624 | XboxOneAppManifestOverridePath: 625 | XboxOnePackageEncryption: 0 626 | XboxOnePackageUpdateGranularity: 2 627 | XboxOneDescription: 628 | XboxOneLanguage: 629 | - enus 630 | XboxOneCapability: [] 631 | XboxOneGameRating: {} 632 | XboxOneIsContentPackage: 0 633 | XboxOneEnableGPUVariability: 0 634 | XboxOneSockets: {} 635 | XboxOneSplashScreen: {fileID: 0} 636 | XboxOneAllowedProductIds: [] 637 | XboxOnePersistentLocalStorageSize: 0 638 | XboxOneXTitleMemory: 8 639 | xboxOneScriptCompiler: 0 640 | vrEditorSettings: 641 | daydream: 642 | daydreamIconForeground: {fileID: 0} 643 | daydreamIconBackground: {fileID: 0} 644 | cloudServicesEnabled: 645 | UNet: 1 646 | facebookSdkVersion: 7.9.4 647 | apiCompatibilityLevel: 2 648 | cloudProjectId: 649 | projectName: Template_2D 650 | organizationId: 651 | cloudEnabled: 0 652 | enableNativePlatformBackendsForNewInputSystem: 0 653 | disableOldInputManagerSupport: 0 654 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2018.1.1f1 2 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 3 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | particleRaycastBudget: 4 33 | asyncUploadTimeSlice: 2 34 | asyncUploadBufferSize: 4 35 | resolutionScalingFixedDPIFactor: 1 36 | excludedTargetPlatforms: [] 37 | - serializedVersion: 2 38 | name: Low 39 | pixelLightCount: 0 40 | shadows: 0 41 | shadowResolution: 0 42 | shadowProjection: 1 43 | shadowCascades: 1 44 | shadowDistance: 20 45 | shadowNearPlaneOffset: 3 46 | shadowCascade2Split: 0.33333334 47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 48 | shadowmaskMode: 0 49 | blendWeights: 2 50 | textureQuality: 0 51 | anisotropicTextures: 0 52 | antiAliasing: 0 53 | softParticles: 0 54 | softVegetation: 0 55 | realtimeReflectionProbes: 0 56 | billboardsFaceCameraPosition: 0 57 | vSyncCount: 0 58 | lodBias: 0.4 59 | maximumLODLevel: 0 60 | particleRaycastBudget: 16 61 | asyncUploadTimeSlice: 2 62 | asyncUploadBufferSize: 4 63 | resolutionScalingFixedDPIFactor: 1 64 | excludedTargetPlatforms: [] 65 | - serializedVersion: 2 66 | name: Medium 67 | pixelLightCount: 1 68 | shadows: 0 69 | shadowResolution: 0 70 | shadowProjection: 1 71 | shadowCascades: 1 72 | shadowDistance: 20 73 | shadowNearPlaneOffset: 3 74 | shadowCascade2Split: 0.33333334 75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 76 | shadowmaskMode: 0 77 | blendWeights: 2 78 | textureQuality: 0 79 | anisotropicTextures: 0 80 | antiAliasing: 0 81 | softParticles: 0 82 | softVegetation: 0 83 | realtimeReflectionProbes: 0 84 | billboardsFaceCameraPosition: 0 85 | vSyncCount: 1 86 | lodBias: 0.7 87 | maximumLODLevel: 0 88 | particleRaycastBudget: 64 89 | asyncUploadTimeSlice: 2 90 | asyncUploadBufferSize: 4 91 | resolutionScalingFixedDPIFactor: 1 92 | excludedTargetPlatforms: [] 93 | - serializedVersion: 2 94 | name: High 95 | pixelLightCount: 2 96 | shadows: 0 97 | shadowResolution: 1 98 | shadowProjection: 1 99 | shadowCascades: 2 100 | shadowDistance: 40 101 | shadowNearPlaneOffset: 3 102 | shadowCascade2Split: 0.33333334 103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 104 | shadowmaskMode: 1 105 | blendWeights: 2 106 | textureQuality: 0 107 | anisotropicTextures: 0 108 | antiAliasing: 0 109 | softParticles: 0 110 | softVegetation: 1 111 | realtimeReflectionProbes: 0 112 | billboardsFaceCameraPosition: 0 113 | vSyncCount: 1 114 | lodBias: 1 115 | maximumLODLevel: 0 116 | particleRaycastBudget: 256 117 | asyncUploadTimeSlice: 2 118 | asyncUploadBufferSize: 4 119 | resolutionScalingFixedDPIFactor: 1 120 | excludedTargetPlatforms: [] 121 | - serializedVersion: 2 122 | name: Very High 123 | pixelLightCount: 3 124 | shadows: 0 125 | shadowResolution: 2 126 | shadowProjection: 1 127 | shadowCascades: 2 128 | shadowDistance: 70 129 | shadowNearPlaneOffset: 3 130 | shadowCascade2Split: 0.33333334 131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 132 | shadowmaskMode: 1 133 | blendWeights: 4 134 | textureQuality: 0 135 | anisotropicTextures: 0 136 | antiAliasing: 0 137 | softParticles: 0 138 | softVegetation: 1 139 | realtimeReflectionProbes: 0 140 | billboardsFaceCameraPosition: 0 141 | vSyncCount: 1 142 | lodBias: 1.5 143 | maximumLODLevel: 0 144 | particleRaycastBudget: 1024 145 | asyncUploadTimeSlice: 2 146 | asyncUploadBufferSize: 4 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Ultra 151 | pixelLightCount: 4 152 | shadows: 0 153 | shadowResolution: 0 154 | shadowProjection: 1 155 | shadowCascades: 4 156 | shadowDistance: 150 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 0 164 | antiAliasing: 0 165 | softParticles: 0 166 | softVegetation: 1 167 | realtimeReflectionProbes: 0 168 | billboardsFaceCameraPosition: 0 169 | vSyncCount: 1 170 | lodBias: 2 171 | maximumLODLevel: 0 172 | particleRaycastBudget: 4096 173 | asyncUploadTimeSlice: 2 174 | asyncUploadBufferSize: 4 175 | resolutionScalingFixedDPIFactor: 1 176 | excludedTargetPlatforms: [] 177 | m_PerPlatformDefaultQuality: 178 | Android: 2 179 | Nintendo 3DS: 5 180 | Nintendo Switch: 5 181 | PS4: 5 182 | PSM: 5 183 | PSP2: 2 184 | Standalone: 5 185 | Tizen: 2 186 | WebGL: 3 187 | WiiU: 5 188 | Windows Store Apps: 5 189 | XboxOne: 5 190 | iPhone: 2 191 | tvOS: 2 192 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.0167 7 | Maximum Allowed Timestep: 0.1 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | m_Enabled: 0 7 | m_TestMode: 0 8 | m_TestEventUrl: 9 | m_TestConfigUrl: 10 | m_TestInitMode: 0 11 | CrashReportingSettings: 12 | m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes 13 | m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate 14 | m_Enabled: 0 15 | m_CaptureEditorExceptions: 1 16 | UnityPurchasingSettings: 17 | m_Enabled: 0 18 | m_TestMode: 0 19 | UnityAnalyticsSettings: 20 | m_Enabled: 1 21 | m_InitializeOnStartup: 1 22 | m_TestMode: 0 23 | m_TestEventUrl: 24 | m_TestConfigUrl: 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # unity-shell 2 | Write and execute code in an intuitive "shell" with autocompletion, for the Unity Editor. 3 | 4 | Any feedback or suggestions? Just write me, create an Issue or a PR ;) 5 | 6 | _How it looks and works like:_ 7 | 8 | ![Imgur](https://i.imgur.com/fMmHDvH.gif) 9 | 10 | ## .NET 4.x Runtime support 11 | If your Unity project is using the .NET 4.x runtime (set in the Player Settings), you'll need to enable the Editor platform for Mono.CSharp.4.x.dll and disable it for Mono.CSharp.3.5.dll by selecting them in the Project view and modifying the Include Platforms in the Inspector. 12 | 13 | Inspired by [UniShell](https://github.com/rje/unishell) 14 | --------------------------------------------------------------------------------