├── .gitignore ├── Assets ├── Plugins.meta ├── Plugins │ ├── QuickSearch.meta │ └── QuickSearch │ │ ├── Editor.meta │ │ └── Editor │ │ ├── Blur.meta │ │ ├── Blur │ │ ├── Blur.shader │ │ ├── Blur.shader.meta │ │ ├── BlurUtility.cs │ │ └── BlurUtility.cs.meta │ │ ├── Fonts.meta │ │ ├── Fonts │ │ ├── OpenSans-Light.ttf │ │ ├── OpenSans-Light.ttf.meta │ │ ├── OpenSans-Regular.ttf │ │ └── OpenSans-Regular.ttf.meta │ │ ├── Indexers.meta │ │ ├── Indexers │ │ ├── AssetIndexer.meta │ │ ├── AssetIndexer │ │ │ ├── AssetIndexer.cs │ │ │ ├── AssetIndexer.cs.meta │ │ │ ├── AssetSearchableElement.cs │ │ │ └── AssetSearchableElement.cs.meta │ │ ├── ISearchableElement.cs │ │ ├── ISearchableElement.cs.meta │ │ ├── MenuIndexer.meta │ │ ├── MenuIndexer │ │ │ ├── MenuIndexer.cs │ │ │ ├── MenuIndexer.cs.meta │ │ │ ├── MenuSearchableElement.cs │ │ │ └── MenuSearchableElement.cs.meta │ │ ├── SceneIndexer.meta │ │ ├── SceneIndexer │ │ │ ├── SceneIndexer.cs │ │ │ ├── SceneIndexer.cs.meta │ │ │ ├── SceneSearchableElement.cs │ │ │ └── SceneSearchableElement.cs.meta │ │ ├── SearchIndexerBase.cs │ │ └── SearchIndexerBase.cs.meta │ │ ├── Internal.meta │ │ ├── Internal │ │ ├── AssetIcons.cs │ │ ├── AssetIcons.cs.meta │ │ ├── EditorThreadLoop.cs │ │ ├── EditorThreadLoop.cs.meta │ │ ├── EditorWindowUtility.cs │ │ ├── EditorWindowUtility.cs.meta │ │ ├── Pool.cs │ │ └── Pool.cs.meta │ │ ├── QuickSearch.guiskin │ │ ├── QuickSearch.guiskin.meta │ │ ├── QuickSearchController.cs │ │ ├── QuickSearchController.cs.meta │ │ ├── QuickSearchEngine.cs │ │ ├── QuickSearchEngine.cs.meta │ │ ├── QuickSearchGUI.cs │ │ ├── QuickSearchGUI.cs.meta │ │ ├── QuickSearchWindow.cs │ │ ├── QuickSearchWindow.cs.meta │ │ ├── Textures.meta │ │ └── Textures │ │ ├── elem_bg_hover.psd │ │ ├── elem_bg_hover.psd.meta │ │ ├── elem_bg_selected.psd │ │ ├── elem_bg_selected.psd.meta │ │ ├── empty.psd │ │ ├── empty.psd.meta │ │ ├── search_icon.psd │ │ ├── search_icon.psd.meta │ │ ├── textfield.psd │ │ ├── textfield.psd.meta │ │ ├── white.psd │ │ └── white.psd.meta ├── TestScene.meta └── TestScene │ ├── TestScene.unity │ └── TestScene.unity.meta ├── LICENSE ├── README.md ├── docs └── demo.gif ├── packages └── latest.unitypackage └── packman.json /.gitignore: -------------------------------------------------------------------------------- 1 | /Temp/ 2 | /ProjectSettings/ 3 | /Library/ 4 | 5 | *.csproj 6 | *.suo 7 | *.sln 8 | -------------------------------------------------------------------------------- /Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 97796be3e631e494fbc89b5f8bc81c39 3 | folderAsset: yes 4 | timeCreated: 1473931672 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4c95d840efd5f8c43ac7af86f72dfa95 3 | folderAsset: yes 4 | timeCreated: 1473931664 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 55c9a0fa2e742da409af4152a31eb8b8 3 | folderAsset: yes 4 | timeCreated: 1473932053 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Blur.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1f638cf5386631f449fe8d54c7e78942 3 | folderAsset: yes 4 | timeCreated: 1473972281 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Blur/Blur.shader: -------------------------------------------------------------------------------- 1 | Shader "Hidden/QuickSearch-Blur" { 2 | Properties { 3 | _MainTex ("", 2D) = "white" {} 4 | _BlurSize ("", Range(0.0, 1.0)) = 1.0 5 | _Tint ("", Color) = (0.0, 0.0, 0.0, 0.0) 6 | _Tinting ("", Range(0.0, 1.0)) = 0.64 7 | } 8 | 9 | SubShader { 10 | 11 | Pass { // Pass 0 - Horizontal 12 | ZTest Always Cull Off ZWrite Off 13 | Fog { Mode off } 14 | Blend Off 15 | 16 | CGPROGRAM 17 | #pragma vertex vert 18 | #pragma fragment frag 19 | #pragma fragmentoption ARB_precision_hint_fastest 20 | 21 | #include "UnityCG.cginc" 22 | 23 | struct v2f { 24 | half4 pos : POSITION; 25 | half2 uv : TEXCOORD0; 26 | }; 27 | 28 | uniform sampler2D _MainTex; 29 | uniform half4 _MainTex_TexelSize; 30 | uniform half _BlurSize; 31 | 32 | v2f vert(appdata_img v) { 33 | v2f o; 34 | o.pos = UnityObjectToClipPos(v.vertex); 35 | o.uv = v.texcoord; 36 | return o; 37 | } 38 | 39 | half4 frag(v2f i) : COLOR { 40 | half4 color = 0.16 * tex2D(_MainTex, i.uv); 41 | color += 0.15 * tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * half2(1.0 * _BlurSize, 0.0)); 42 | color += 0.15 * tex2D(_MainTex, i.uv - _MainTex_TexelSize.xy * half2(1.0 * _BlurSize, 0.0)); 43 | color += 0.12 * tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * half2(2.0 * _BlurSize, 0.0)); 44 | color += 0.12 * tex2D(_MainTex, i.uv - _MainTex_TexelSize.xy * half2(2.0 * _BlurSize, 0.0)); 45 | color += 0.09 * tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * half2(3.0 * _BlurSize, 0.0)); 46 | color += 0.09 * tex2D(_MainTex, i.uv - _MainTex_TexelSize.xy * half2(3.0 * _BlurSize, 0.0)); 47 | color += 0.06 * tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * half2(4.0 * _BlurSize, 0.0)); 48 | color += 0.06 * tex2D(_MainTex, i.uv - _MainTex_TexelSize.xy * half2(4.0 * _BlurSize, 0.0)); 49 | return color; 50 | } 51 | ENDCG 52 | } 53 | 54 | Pass { // Pass 1 - Vertical 55 | ZTest Always Cull Off ZWrite Off 56 | Fog { Mode off } 57 | Blend Off 58 | 59 | CGPROGRAM 60 | #pragma vertex vert 61 | #pragma fragment frag 62 | #pragma fragmentoption ARB_precision_hint_fastest 63 | 64 | #include "UnityCG.cginc" 65 | 66 | struct v2f { 67 | half4 pos : POSITION; 68 | half2 uv : TEXCOORD0; 69 | }; 70 | 71 | uniform sampler2D _MainTex; 72 | uniform half4 _MainTex_TexelSize; 73 | uniform half _BlurSize; 74 | 75 | v2f vert(appdata_img v) { 76 | v2f o; 77 | o.pos = UnityObjectToClipPos(v.vertex); 78 | o.uv = v.texcoord; 79 | return o; 80 | } 81 | 82 | half4 frag(v2f i) : COLOR { 83 | half4 color = 0.16 * tex2D(_MainTex, i.uv); 84 | color += 0.15 * tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * half2(0.0, 1.0 * _BlurSize)); 85 | color += 0.15 * tex2D(_MainTex, i.uv - _MainTex_TexelSize.xy * half2(0.0, 1.0 * _BlurSize)); 86 | color += 0.12 * tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * half2(0.0, 2.0 * _BlurSize)); 87 | color += 0.12 * tex2D(_MainTex, i.uv - _MainTex_TexelSize.xy * half2(0.0, 2.0 * _BlurSize)); 88 | color += 0.09 * tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * half2(0.0, 3.0 * _BlurSize)); 89 | color += 0.09 * tex2D(_MainTex, i.uv - _MainTex_TexelSize.xy * half2(0.0, 3.0 * _BlurSize)); 90 | color += 0.06 * tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * half2(0.0, 4.0 * _BlurSize)); 91 | color += 0.06 * tex2D(_MainTex, i.uv - _MainTex_TexelSize.xy * half2(0.0, 4.0 * _BlurSize)); 92 | return color; 93 | } 94 | ENDCG 95 | } 96 | 97 | Pass { // Pass 2 - Tint 98 | ZTest Always Cull Off ZWrite Off 99 | Fog { Mode off } 100 | Blend Off 101 | 102 | CGPROGRAM 103 | #pragma vertex vert 104 | #pragma fragment frag 105 | #pragma fragmentoption ARB_precision_hint_fastest 106 | 107 | #include "UnityCG.cginc" 108 | 109 | struct v2f { 110 | half4 pos : POSITION; 111 | half2 uv : TEXCOORD0; 112 | }; 113 | 114 | uniform sampler2D _MainTex; 115 | uniform half4 _Tint; 116 | uniform half _Tinting; 117 | 118 | v2f vert(appdata_img v) { 119 | v2f o; 120 | o.pos = UnityObjectToClipPos(v.vertex); 121 | o.uv = v.texcoord; 122 | return o; 123 | } 124 | 125 | half4 frag(v2f i) : COLOR { 126 | return lerp(tex2D(_MainTex, i.uv), _Tint, _Tinting); 127 | } 128 | ENDCG 129 | } 130 | } 131 | 132 | Fallback off 133 | } -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Blur/Blur.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 925cae92a4b3c1a47a788dfa16d2cd98 3 | timeCreated: 1473972290 4 | licenseType: Free 5 | ShaderImporter: 6 | defaultTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Blur/BlurUtility.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | // Referenced from https://medium.com/@jimfleming/translucent-editor-windows-in-unity3d-b21778c04de9 7 | namespace QuickSearch { 8 | 9 | public sealed class BlurOptions { 10 | public Color tint = Color.white; 11 | public float tinting = 0.72f; 12 | public float blurSize = 4f; 13 | public int passes = 8; 14 | } 15 | 16 | public static class BlurUtility { 17 | 18 | public static Texture BlurTexture (Texture sourceTexture, BlurOptions options) { 19 | var blurMaterial = new Material(Shader.Find("Hidden/QuickSearch-Blur")); 20 | blurMaterial.SetColor("_Tint", options.tint); 21 | blurMaterial.SetFloat("_Tinting", options.tinting); 22 | blurMaterial.SetFloat("_BlurSize", options.blurSize); 23 | 24 | var destTexture = new RenderTexture(sourceTexture.width, sourceTexture.height, 0); 25 | destTexture.Create(); 26 | 27 | var active = RenderTexture.active; 28 | try { 29 | var tempA = RenderTexture.GetTemporary(sourceTexture.width, sourceTexture.height); 30 | var tempB = RenderTexture.GetTemporary(sourceTexture.width, sourceTexture.height); 31 | 32 | for (int i = 0; i < options.passes; i++) { 33 | if (i == 0) { 34 | Graphics.Blit(sourceTexture, tempA, blurMaterial, 0); 35 | } else { 36 | Graphics.Blit(tempB, tempA, blurMaterial, 0); 37 | } 38 | Graphics.Blit(tempA, tempB, blurMaterial, 1); 39 | } 40 | 41 | Graphics.Blit(tempB, destTexture, blurMaterial, 2); 42 | 43 | RenderTexture.ReleaseTemporary(tempA); 44 | RenderTexture.ReleaseTemporary(tempB); 45 | } catch (Exception e) { 46 | Debug.LogException(e); 47 | } finally { 48 | RenderTexture.active = active; // Restore 49 | } 50 | 51 | Material.DestroyImmediate(blurMaterial); 52 | 53 | return destTexture; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Blur/BlurUtility.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be52845401018f14ba9623016a7b5609 3 | timeCreated: 1473972350 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Fonts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 77dfe972cb368a940babe6ab63b8213a 3 | folderAsset: yes 4 | timeCreated: 1473948259 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Fonts/OpenSans-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/Assets/Plugins/QuickSearch/Editor/Fonts/OpenSans-Light.ttf -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Fonts/OpenSans-Light.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 299930e9fd0253841b2c157666da74af 3 | timeCreated: 1473951433 4 | licenseType: Free 5 | TrueTypeFontImporter: 6 | serializedVersion: 3 7 | fontSize: 16 8 | forceTextureCase: -2 9 | characterSpacing: 1 10 | characterPadding: 0 11 | includeFontData: 1 12 | fontNames: [] 13 | fallbackFontReferences: 14 | - {fileID: 12800000, guid: 3582ef81e9e378e489516a55b77a94ed, type: 3} 15 | customCharacters: 16 | fontRenderingMode: 3 17 | ascentCalculationMode: 1 18 | userData: 19 | assetBundleName: 20 | assetBundleVariant: 21 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/Assets/Plugins/QuickSearch/Editor/Fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Fonts/OpenSans-Regular.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3582ef81e9e378e489516a55b77a94ed 3 | timeCreated: 1473951433 4 | licenseType: Free 5 | TrueTypeFontImporter: 6 | serializedVersion: 3 7 | fontSize: 16 8 | forceTextureCase: -2 9 | characterSpacing: 1 10 | characterPadding: 0 11 | includeFontData: 1 12 | fontNames: [] 13 | fallbackFontReferences: 14 | - {fileID: 12800000, guid: 299930e9fd0253841b2c157666da74af, type: 3} 15 | customCharacters: 16 | fontRenderingMode: 3 17 | ascentCalculationMode: 1 18 | userData: 19 | assetBundleName: 20 | assetBundleVariant: 21 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 70c5e96996355494aa64c3a1954379d4 3 | folderAsset: yes 4 | timeCreated: 1473934144 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/AssetIndexer.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9983f52c6ea1aba4fa191809b13fd737 3 | folderAsset: yes 4 | timeCreated: 1473949775 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/AssetIndexer/AssetIndexer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Threading; 5 | using UnityEditor; 6 | using UnityEngine; 7 | 8 | namespace QuickSearch { 9 | 10 | public sealed class AssetIndexerHook : AssetPostprocessor { 11 | 12 | private static void OnPostprocessAllAssets (string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { 13 | if (AssetIndexer.Active != null) 14 | AssetIndexer.Active.ReindexElements(); 15 | } 16 | } 17 | 18 | public sealed class AssetIndexer : SearchIndexerBase { 19 | public static AssetIndexer Active { get; private set; } 20 | 21 | private static readonly Pool elementPool_ = new Pool(() => new AssetSearchableElement(), 500); 22 | private readonly List elements_ = new List(200); 23 | 24 | protected override void OnStartup () { 25 | ReindexElements(); 26 | Active = this; 27 | } 28 | 29 | public void ReindexElements () { 30 | var thread = new Thread(CollectAssets); 31 | thread.Start(AssetDatabase.GetAllAssetPaths()); 32 | } 33 | 34 | public void CollectAssets (object arg) { 35 | try { 36 | var assetPaths = (string[])arg; 37 | lock (elements_) { 38 | for (var i = 0; i < elements_.Count; ++i) { 39 | var element = elements_[i]; 40 | elementPool_.Dealloc((AssetSearchableElement)element); 41 | } 42 | elements_.Clear(); 43 | 44 | for (var i = 0; i < assetPaths.Length; ++i) { 45 | var assetPath = assetPaths[i]; 46 | 47 | // Ignore non-project assets 48 | if (assetPath.StartsWith("Assets/") == false) 49 | continue; 50 | 51 | var assetElement = elementPool_.Alloc(); 52 | assetElement.Setup(assetPath); 53 | elements_.Add(assetElement); 54 | } 55 | } 56 | } catch (System.Exception) { 57 | } 58 | } 59 | 60 | protected override List GetElements () { 61 | lock (elements_) { 62 | return elements_; 63 | } 64 | } 65 | 66 | protected override bool IsActive () { 67 | return true; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/AssetIndexer/AssetIndexer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f367ee375a9e9d147a89c035e9ae0bd6 3 | timeCreated: 1473934351 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/AssetIndexer/AssetSearchableElement.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.IO; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | namespace QuickSearch { 7 | 8 | public sealed class AssetSearchableElement : ISearchableElement { 9 | private float priority_ = 1f; 10 | 11 | private bool isFolder_ = false; 12 | private bool isTexture_ = false; 13 | 14 | private string assetPath_ = null; 15 | private string assetFilename_ = null; 16 | private string assetExt_ = null; 17 | 18 | public void Setup (string assetPath) { 19 | assetPath_ = assetPath; 20 | assetFilename_ = Path.GetFileName(assetPath); 21 | assetExt_ = Path.GetExtension(assetPath).ToLowerInvariant(); 22 | 23 | if (assetExt_.Length > 0) 24 | assetExt_ = assetExt_.Substring(1); 25 | 26 | if (Directory.Exists(assetPath_)) { 27 | isFolder_ = true; 28 | assetExt_ = "folder"; 29 | } else { 30 | isTexture_ = ( 31 | assetExt_ == "png" || assetExt_ == "psd" 32 | || assetExt_ == "jpg" || assetExt_ == "tga" || assetExt_ == "tif" 33 | || assetExt_ == "bmp" 34 | ); 35 | } 36 | } 37 | 38 | string ISearchableElement.PrimaryContents { 39 | get { 40 | return assetFilename_; 41 | } 42 | } 43 | 44 | string ISearchableElement.SecondaryContents { 45 | get { 46 | return assetPath_; 47 | } 48 | } 49 | 50 | float ISearchableElement.Priority { 51 | get { 52 | return priority_; 53 | } 54 | } 55 | 56 | Texture2D ISearchableElement.Icon { 57 | get { 58 | if (isTexture_) { 59 | var texture = AssetDatabase.LoadAssetAtPath(assetPath_); 60 | if (texture != null) 61 | return texture; 62 | } 63 | return AssetIcons.GetIcon(assetExt_); 64 | } 65 | } 66 | 67 | string ISearchableElement.Title { 68 | get { 69 | if (isFolder_) 70 | return assetFilename_; 71 | return Path.GetFileNameWithoutExtension(assetFilename_); 72 | } 73 | } 74 | 75 | string ISearchableElement.Description { 76 | get { 77 | return assetPath_; 78 | } 79 | } 80 | 81 | bool ISearchableElement.SupportDrag { 82 | get { 83 | return true; 84 | } 85 | } 86 | 87 | UnityEngine.Object ISearchableElement.DragObject { 88 | get { 89 | return AssetDatabase.LoadAssetAtPath(assetPath_); 90 | } 91 | } 92 | 93 | void ISearchableElement.Select () { 94 | _Select(false); 95 | } 96 | 97 | void ISearchableElement.Execute () { 98 | _Select(true); 99 | } 100 | 101 | private void _Select (bool focus) { 102 | var obj = AssetDatabase.LoadAssetAtPath(assetPath_); 103 | Selection.activeObject = obj; 104 | EditorGUIUtility.PingObject(obj); 105 | 106 | if (focus) 107 | EditorUtility.FocusProjectWindow(); 108 | } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/AssetIndexer/AssetSearchableElement.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0d88c36133302b544a7a1b57e4921b7c 3 | timeCreated: 1473949858 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/ISearchableElement.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using UnityEngine; 3 | 4 | namespace QuickSearch { 5 | 6 | public interface ISearchableElement { 7 | string PrimaryContents { get; } 8 | string SecondaryContents { get; } 9 | float Priority { get; } 10 | 11 | Texture2D Icon { get; } 12 | string Title { get; } 13 | string Description { get; } 14 | bool SupportDrag { get; } 15 | Object DragObject { get; } 16 | 17 | void Select (); 18 | 19 | void Execute (); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/ISearchableElement.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a599058d869b26d40952ab9d76607242 3 | timeCreated: 1473949801 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/MenuIndexer.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4db9907e8697be5488863849f443f31e 3 | folderAsset: yes 4 | timeCreated: 1473957067 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/MenuIndexer/MenuIndexer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Reflection; 5 | using System.Runtime.InteropServices; 6 | using System.Threading; 7 | using UnityEditor; 8 | using UnityEngine; 9 | 10 | namespace QuickSearch { 11 | 12 | public sealed class MenuIndexer : SearchIndexerBase { 13 | private readonly List elements_ = new List(100); 14 | 15 | protected override void OnStartup () { 16 | IndexAll(); 17 | } 18 | 19 | private void IndexAll () { 20 | var thread = new Thread(_IndexAll); 21 | thread.Start(); 22 | } 23 | 24 | private void _IndexAll () { 25 | lock (elements_) { 26 | elements_.Clear(); 27 | 28 | IndexMenuItemAttribs(); 29 | IndexHiddenMenus(); 30 | } 31 | } 32 | 33 | private void IndexMenuItemAttribs () { 34 | var assemblies = AppDomain.CurrentDomain.GetAssemblies(); 35 | for (var i = 0; i < assemblies.Length; ++i) { 36 | var assembly = assemblies[i]; 37 | var assemblyName = assembly.FullName; 38 | 39 | // Skip system assembly 40 | if (assemblyName.StartsWith("System.") || assemblyName.StartsWith("Mono.") || assemblyName.StartsWith("mscorlib")) 41 | continue; 42 | if (assemblyName.StartsWith("nunit.") || assemblyName.StartsWith("I18N")) 43 | continue; 44 | 45 | var types = assembly.GetTypes(); 46 | 47 | foreach (var type in types) { 48 | var methods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); 49 | 50 | foreach (var method in methods) { 51 | var attribs = method.GetCustomAttributes(typeof(MenuItem), false); 52 | if (attribs.Length <= 0) 53 | continue; 54 | 55 | foreach (var attrib in attribs) { 56 | var menuItem = (MenuItem)attrib; 57 | if (menuItem.validate) 58 | continue; 59 | 60 | var menuPath = menuItem.menuItem; 61 | if (menuPath.StartsWith("internal:") || menuPath.StartsWith("CONTEXT/")) 62 | continue; 63 | 64 | var element = new MenuSearchableElement(menuPath); 65 | elements_.Add(element); 66 | } 67 | } 68 | } 69 | } 70 | } 71 | 72 | private void IndexHiddenMenus () { 73 | #if UNITY_EDITOR_WIN 74 | // File 75 | IndexHiddenMenuForWindows("File/New Scene", 0xE100); 76 | IndexHiddenMenuForWindows("File/Open Scene", 0xE101); 77 | IndexHiddenMenuForWindows("File/Save Scene", 0xE103); 78 | IndexHiddenMenuForWindows("File/Save Scene as...", 0xE104); 79 | 80 | IndexHiddenMenuForWindows("File/New Project", 0x9C4A); 81 | IndexHiddenMenuForWindows("File/Open Project", 0x9C66); 82 | IndexHiddenMenuForWindows("File/Save Project", 0x9C69); 83 | 84 | IndexHiddenMenuForWindows("File/Build Settings...", 0x9C73); 85 | IndexHiddenMenuForWindows("File/Build & Run", 0x9C74); 86 | 87 | // Edit 88 | IndexHiddenMenuForWindows("Edit/Preferences...", 0x9C72); 89 | IndexHiddenMenuForWindows("Edit/Modules...", 0x9C77); 90 | 91 | // Assets 92 | IndexHiddenMenuForWindows("Assets/Refresh", 0x3CB9); 93 | #endif 94 | } 95 | 96 | #if UNITY_EDITOR_WIN 97 | 98 | [DllImport("user32.dll")] 99 | private static extern IntPtr GetActiveWindow (); 100 | 101 | [DllImport("User32.dll")] 102 | private static extern int SendMessage (IntPtr hWnd, int msg, int wParam, int lParam); 103 | 104 | private const int WM_COMMAND = 0x0111; 105 | 106 | private void IndexHiddenMenuForWindows (string menuPath, int command) { 107 | elements_.Add(new MenuSearchableElement(menuPath, () => SendCommandToEditorForWindows(command), true)); 108 | } 109 | 110 | private void SendCommandToEditorForWindows (int command) { 111 | var activeWindow = GetActiveWindow(); 112 | SendMessage(activeWindow, WM_COMMAND, command, 0); 113 | } 114 | 115 | #endif 116 | 117 | protected override List GetElements () { 118 | lock (elements_) { 119 | return elements_; 120 | } 121 | } 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/MenuIndexer/MenuIndexer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0a0b02adc18684941a6a99f4cb11e9f6 3 | timeCreated: 1473957070 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/MenuIndexer/MenuSearchableElement.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Reflection; 4 | using System.Text.RegularExpressions; 5 | using UnityEditor; 6 | using UnityEngine; 7 | 8 | namespace QuickSearch { 9 | 10 | public sealed class MenuSearchableElement : ISearchableElement { 11 | private readonly string menuPath_ = null; 12 | private readonly string contents_ = null; 13 | private readonly string title_ = null; 14 | private readonly bool markExperimental_ = false; 15 | 16 | private readonly Action action_ = null; 17 | 18 | public MenuSearchableElement (string menuPath, Action action = null, bool markExperimental = false) { 19 | menuPath_ = menuPath; 20 | action_ = action; 21 | markExperimental_ = markExperimental; 22 | 23 | // Remove hot keys 24 | var sanitizedPath = SanitizeMenuPath(menuPath); 25 | contents_ = "Menu: " + sanitizedPath; 26 | 27 | // Parse title 28 | var titleSepIndex = sanitizedPath.LastIndexOf('/'); 29 | if (titleSepIndex >= 0) 30 | title_ = sanitizedPath.Substring(titleSepIndex + 1); 31 | else 32 | title_ = sanitizedPath; 33 | } 34 | 35 | private static readonly Regex removeCtrlRegex_ = new Regex(@" ?(%[^% ]+)$"); 36 | private static readonly Regex removeShiftRegex_ = new Regex(@" ?(#[^# ]+)$"); 37 | private static readonly Regex removeAltRegex_ = new Regex(@" ?(&[^& ]+)$"); 38 | private static readonly Regex removeUnderscoreIdx_ = new Regex(@" ?(_[^_ ]+)$"); 39 | 40 | private static string SanitizeMenuPath (string menuPath) { 41 | var _path = menuPath; 42 | var hotkeyIdx = 5000; 43 | 44 | var ctrl = removeCtrlRegex_.Match(menuPath); 45 | if (ctrl.Success) 46 | hotkeyIdx = Mathf.Min(ctrl.Index, hotkeyIdx); 47 | 48 | var shift = removeShiftRegex_.Match(menuPath); 49 | if (shift.Success) 50 | hotkeyIdx = Mathf.Min(shift.Index, hotkeyIdx); 51 | 52 | var alt = removeAltRegex_.Match(menuPath); 53 | if (alt.Success) 54 | hotkeyIdx = Mathf.Min(alt.Index, hotkeyIdx); 55 | 56 | var underscore = removeUnderscoreIdx_.Match(menuPath); 57 | if (underscore.Success) 58 | hotkeyIdx = Mathf.Min(underscore.Index, hotkeyIdx); 59 | 60 | var hotkeyExists = (hotkeyIdx < 5000); 61 | if (hotkeyExists) 62 | _path = _path.Substring(0, hotkeyIdx); 63 | 64 | return _path; 65 | } 66 | 67 | string ISearchableElement.PrimaryContents { 68 | get { 69 | return menuPath_; 70 | } 71 | } 72 | 73 | string ISearchableElement.SecondaryContents { 74 | get { 75 | return contents_; 76 | } 77 | } 78 | 79 | float ISearchableElement.Priority { 80 | get { 81 | return 1f; 82 | } 83 | } 84 | 85 | Texture2D ISearchableElement.Icon { 86 | get { 87 | return null; 88 | } 89 | } 90 | 91 | string ISearchableElement.Title { 92 | get { 93 | return title_; 94 | } 95 | } 96 | 97 | string ISearchableElement.Description { 98 | get { 99 | var desc = contents_; 100 | if (markExperimental_) 101 | desc += " (experimental)"; 102 | return desc; 103 | } 104 | } 105 | 106 | bool ISearchableElement.SupportDrag { 107 | get { 108 | return false; 109 | } 110 | } 111 | 112 | UnityEngine.Object ISearchableElement.DragObject { 113 | get { 114 | return null; 115 | } 116 | } 117 | 118 | void ISearchableElement.Select () { 119 | } 120 | 121 | void ISearchableElement.Execute () { 122 | if (action_ != null) { 123 | EditorApplication.delayCall += () => action_(); 124 | return; 125 | } 126 | 127 | EditorApplication.ExecuteMenuItem(menuPath_); 128 | } 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/MenuIndexer/MenuSearchableElement.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5f2e6296341cb5d41bc037a80da8d334 3 | timeCreated: 1473957070 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/SceneIndexer.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2d60d46f803ce9b488439913c67b75dd 3 | folderAsset: yes 4 | timeCreated: 1473954993 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/SceneIndexer/SceneIndexer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace QuickSearch { 8 | 9 | public sealed class SceneIndexer : SearchIndexerBase { 10 | private readonly List elements_ = new List(100); 11 | 12 | private readonly List tempTransforms_ = new List(100); 13 | 14 | protected override void OnOpen () { 15 | elements_.Clear(); 16 | 17 | var rootObjs = GetSceneRoots(); 18 | for (var i = 0; i < rootObjs.Count; ++i) { 19 | var obj = rootObjs[i]; 20 | obj.GetComponentsInChildren(true, tempTransforms_); 21 | 22 | for (var j = 0; j < tempTransforms_.Count; ++j) { 23 | var tr = tempTransforms_[j]; 24 | if (tr == null) 25 | continue; 26 | 27 | var element = new SceneSearchableElement(tr.gameObject); 28 | elements_.Add(element); 29 | } 30 | } 31 | } 32 | 33 | private static List GetSceneRoots () { 34 | var roots = new List(); 35 | 36 | #if UNITY_5_3_OR_NEWER 37 | var sceneCount = UnityEngine.SceneManagement.SceneManager.sceneCount; 38 | for (int i = 0; i < sceneCount; i++) 39 | { 40 | var scene = UnityEngine.SceneManagement.SceneManager.GetSceneAt(i); 41 | roots.AddRange(scene.GetRootGameObjects()); 42 | } 43 | #else 44 | var prop = new HierarchyProperty(HierarchyType.GameObjects); 45 | var expanded = new int[0]; 46 | 47 | while (prop.Next(expanded)) 48 | { 49 | var go = prop.pptrValue as GameObject; 50 | if (go == null) 51 | continue; 52 | roots.Add(go); 53 | } 54 | #endif 55 | return roots; 56 | } 57 | 58 | protected override List GetElements () { 59 | return elements_; 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/SceneIndexer/SceneIndexer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 56ea96940b6bc2c42810bbe58c0a0830 3 | timeCreated: 1473955000 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/SceneIndexer/SceneSearchableElement.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Reflection; 3 | using System.Text; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace QuickSearch { 8 | 9 | public sealed class SceneSearchableElement : ISearchableElement { 10 | private readonly GameObject gameObject_ = null; 11 | private readonly string name_ = null; 12 | private readonly string secondary_ = null; 13 | private readonly string desc_ = null; 14 | 15 | public SceneSearchableElement (GameObject gameObject) { 16 | gameObject_ = gameObject; 17 | name_ = gameObject.name; 18 | 19 | var path = GetFullPath(gameObject.transform); 20 | desc_ = "Scene: " + path + (gameObject.activeInHierarchy ? " (active)" : " (inactive)"); 21 | secondary_ = "Scene:" + path; 22 | } 23 | 24 | private static string GetFullPath (Transform tr) { 25 | var sb = new StringBuilder(); 26 | var parent = tr.parent; 27 | 28 | while (parent != null) { 29 | sb.Insert(0, '/'); 30 | sb.Insert(0, parent.name); 31 | parent = parent.parent; 32 | } 33 | sb.Append(tr.name); 34 | return sb.ToString(); 35 | } 36 | 37 | string ISearchableElement.PrimaryContents { 38 | get { 39 | return name_; 40 | } 41 | } 42 | 43 | string ISearchableElement.SecondaryContents { 44 | get { 45 | return secondary_; 46 | } 47 | } 48 | 49 | float ISearchableElement.Priority { 50 | get { 51 | return 1f; 52 | } 53 | } 54 | 55 | Texture2D ISearchableElement.Icon { 56 | get { 57 | return EditorGUIUtility.FindTexture("GameObject Icon"); 58 | } 59 | } 60 | 61 | string ISearchableElement.Title { 62 | get { 63 | return name_; 64 | } 65 | } 66 | 67 | string ISearchableElement.Description { 68 | get { 69 | return desc_; 70 | } 71 | } 72 | 73 | bool ISearchableElement.SupportDrag { 74 | get { 75 | return true; 76 | } 77 | } 78 | 79 | UnityEngine.Object ISearchableElement.DragObject { 80 | get { 81 | return gameObject_; 82 | } 83 | } 84 | 85 | void ISearchableElement.Select () { 86 | _Select(false); 87 | } 88 | 89 | void ISearchableElement.Execute () { 90 | _Select(true); 91 | } 92 | 93 | private void _Select (bool focus) { 94 | Selection.activeGameObject = gameObject_; 95 | EditorGUIUtility.PingObject(gameObject_); 96 | 97 | if (focus) { 98 | // Set Focus on Hierarchy Window 99 | EditorApplication.ExecuteMenuItem("Window/Hierarchy"); 100 | } 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/SceneIndexer/SceneSearchableElement.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d12157dc24f1c84dad442f0a0b7b04e 3 | timeCreated: 1473955010 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/SearchIndexerBase.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace QuickSearch { 6 | 7 | public abstract class SearchIndexerBase { 8 | 9 | public void NotifyOnStartup () { 10 | OnStartup(); 11 | } 12 | 13 | public void NotifyOnOpen () { 14 | OnOpen(); 15 | } 16 | 17 | public void NotifyOnQuery (string query) { 18 | OnQuery(query); 19 | } 20 | 21 | public void RequestElements (List outResult) { 22 | outResult.Clear(); 23 | 24 | if (!IsActive()) 25 | return; 26 | 27 | var elements = GetElements(); 28 | lock (elements) { 29 | outResult.AddRange(elements); 30 | } 31 | } 32 | 33 | protected virtual void OnStartup () { 34 | } 35 | 36 | protected virtual void OnOpen () { 37 | } 38 | 39 | protected virtual void OnQuery (string query) { 40 | } 41 | 42 | protected abstract List GetElements (); 43 | 44 | protected virtual bool IsActive () { 45 | return true; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Indexers/SearchIndexerBase.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5d0b4cdb7304e3841801873fb8fbcafe 3 | timeCreated: 1474001887 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 397328624a53dab46bb676cc47fe0d17 3 | folderAsset: yes 4 | timeCreated: 1473954160 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal/AssetIcons.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using UnityEditor; 3 | using UnityEngine; 4 | 5 | namespace QuickSearch { 6 | 7 | public static class AssetIcons { 8 | 9 | // Referenced from http://answers.unity3d.com/questions/792118/what-are-the-editor-resources-by-name-for-editorgu.html 10 | public static Texture2D GetIcon (string assetExt) { 11 | switch (assetExt) { 12 | case "boo": 13 | return EditorGUIUtility.FindTexture("boo Script Icon"); 14 | 15 | case "cginc": 16 | return EditorGUIUtility.FindTexture("CGProgram Icon"); 17 | 18 | case "cs": 19 | return EditorGUIUtility.FindTexture("cs Script Icon"); 20 | 21 | case "guiskin": 22 | return EditorGUIUtility.FindTexture("GUISkin Icon"); 23 | 24 | case "js": 25 | return EditorGUIUtility.FindTexture("Js Script Icon"); 26 | 27 | case "mat": 28 | return EditorGUIUtility.FindTexture("Material Icon"); 29 | 30 | case "prefab": 31 | return EditorGUIUtility.FindTexture("PrefabNormal Icon"); 32 | 33 | case "shader": 34 | return EditorGUIUtility.FindTexture("Shader Icon"); 35 | 36 | case "txt": 37 | return EditorGUIUtility.FindTexture("TextAsset Icon"); 38 | 39 | case "unity": 40 | return EditorGUIUtility.FindTexture("SceneAsset Icon"); 41 | 42 | case "asset": 43 | case "prefs": 44 | return EditorGUIUtility.FindTexture("GameManager Icon"); 45 | 46 | case "anim": 47 | return EditorGUIUtility.FindTexture("Animation Icon"); 48 | 49 | case "meta": 50 | return EditorGUIUtility.FindTexture("MetaFile Icon"); 51 | 52 | case "ttf": 53 | case "otf": 54 | case "fon": 55 | case "fnt": 56 | return EditorGUIUtility.FindTexture("Font Icon"); 57 | 58 | case "aac": 59 | case "aif": 60 | case "aiff": 61 | case "au": 62 | case "mid": 63 | case "midi": 64 | case "mp3": 65 | case "mpa": 66 | case "ra": 67 | case "ram": 68 | case "wma": 69 | case "wav": 70 | case "wave": 71 | case "ogg": 72 | return EditorGUIUtility.FindTexture("AudioClip Icon"); 73 | 74 | case "ai": 75 | case "apng": 76 | case "png": 77 | case "bmp": 78 | case "cdr": 79 | case "dib": 80 | case "eps": 81 | case "exif": 82 | case "gif": 83 | case "ico": 84 | case "icon": 85 | case "j": 86 | case "j2c": 87 | case "j2k": 88 | case "jas": 89 | case "jiff": 90 | case "jng": 91 | case "jp2": 92 | case "jpc": 93 | case "jpe": 94 | case "jpeg": 95 | case "jpf": 96 | case "jpg": 97 | case "jpw": 98 | case "jpx": 99 | case "jtf": 100 | case "mac": 101 | case "omf": 102 | case "qif": 103 | case "qti": 104 | case "qtif": 105 | case "tex": 106 | case "tfw": 107 | case "tga": 108 | case "tif": 109 | case "tiff": 110 | case "wmf": 111 | case "psd": 112 | case "exr": 113 | return EditorGUIUtility.FindTexture("Texture Icon"); 114 | 115 | case "3df": 116 | case "3dm": 117 | case "3dmf": 118 | case "3ds": 119 | case "3dv": 120 | case "3dx": 121 | case "blend": 122 | case "c4d": 123 | case "lwo": 124 | case "lws": 125 | case "ma": 126 | case "max": 127 | case "mb": 128 | case "mesh": 129 | case "obj": 130 | case "vrl": 131 | case "wrl": 132 | case "wrz": 133 | case "fbx": 134 | return EditorGUIUtility.FindTexture("Mesh Icon"); 135 | 136 | case "asf": 137 | case "asx": 138 | case "avi": 139 | case "dat": 140 | case "divx": 141 | case "dvx": 142 | case "mlv": 143 | case "m2l": 144 | case "m2t": 145 | case "m2ts": 146 | case "m2v": 147 | case "m4e": 148 | case "m4v": 149 | case "mjp": 150 | case "mov": 151 | case "movie": 152 | case "mp21": 153 | case "mp4": 154 | case "mpe": 155 | case "mpeg": 156 | case "mpg": 157 | case "mpv2": 158 | case "ogm": 159 | case "qt": 160 | case "rm": 161 | case "rmvb": 162 | case "wmw": 163 | case "xvid": 164 | return EditorGUIUtility.FindTexture("MovieTexture Icon"); 165 | 166 | case "colors": 167 | case "gradients": 168 | case "curves": 169 | case "curvesnormalized": 170 | case "particlecurves": 171 | case "particlecurvessigned": 172 | case "particledoublecurves": 173 | case "particledoublecurvessigned": 174 | return EditorGUIUtility.FindTexture("ScriptableObject Icon"); 175 | 176 | case "folder": 177 | return EditorGUIUtility.FindTexture("Folder Icon"); 178 | } 179 | return EditorGUIUtility.FindTexture("DefaultAsset Icon"); 180 | } 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal/AssetIcons.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 54eff461bd8b2c244a448bf1e105d84d 3 | timeCreated: 1473954171 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal/EditorThreadLoop.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Threading; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace QuickSearch { 8 | 9 | public sealed class EditorThreadLoop { 10 | private bool started_ = false; 11 | private readonly Action loopFunc_ = null; 12 | 13 | private Thread thread_ = null; 14 | private readonly AutoResetEvent waitHandle_ = new AutoResetEvent(false); 15 | private readonly int interval_ms_ = 0; 16 | 17 | public EditorThreadLoop (Action loopFunc, int interval_ms = 20) { 18 | loopFunc_ = loopFunc; 19 | interval_ms_ = interval_ms; 20 | } 21 | 22 | public void Start () { 23 | if (started_) 24 | return; 25 | started_ = true; 26 | 27 | EditorApplication.update += Editor_Update; 28 | 29 | thread_ = new Thread(ThreadFunc); 30 | thread_.Start(); 31 | } 32 | 33 | private void Editor_Update () { 34 | waitHandle_.Set(); 35 | } 36 | 37 | private void ThreadFunc () { 38 | while (true) { 39 | Thread.Sleep(interval_ms_); 40 | waitHandle_.WaitOne(); 41 | 42 | try { 43 | if (loopFunc_ != null) 44 | loopFunc_(); 45 | } catch (Exception ex) { 46 | Debug.LogException(ex); 47 | } 48 | } 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal/EditorThreadLoop.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2f3f1c0def13b124fbf0cbce66f85d96 3 | timeCreated: 1478169295 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal/EditorWindowUtility.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using UnityEditor; 6 | using UnityEngine; 7 | 8 | namespace QuickSearch { 9 | // Referenced from http://answers.unity3d.com/questions/960413/editor-window-how-to-center-a-window.html 10 | public static class EditorWindowUtility { 11 | public static System.Type[] GetAllDerivedTypes (AppDomain appDomain, Type type) { 12 | var result = new List(); 13 | var assemblies = appDomain.GetAssemblies(); 14 | foreach (var assembly in assemblies) { 15 | var types = assembly.GetTypes(); 16 | foreach (var t in types) { 17 | if (t.IsSubclassOf(type)) 18 | result.Add(t); 19 | } 20 | } 21 | return result.ToArray(); 22 | } 23 | 24 | public static Rect GetEditorMainWindowPos () { 25 | var containerWinType = GetAllDerivedTypes(AppDomain.CurrentDomain, typeof(ScriptableObject)).Where(t => t.Name == "ContainerWindow").FirstOrDefault(); 26 | if (containerWinType == null) 27 | throw new System.MissingMemberException("Can't find internal type ContainerWindow. Maybe something has changed inside Unity"); 28 | var showModeField = containerWinType.GetField("m_ShowMode", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); 29 | var positionProperty = containerWinType.GetProperty("position", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); 30 | if (showModeField == null || positionProperty == null) 31 | throw new System.MissingFieldException("Can't find internal fields 'm_ShowMode' or 'position'. Maybe something has changed inside Unity"); 32 | var windows = Resources.FindObjectsOfTypeAll(containerWinType); 33 | foreach (var win in windows) { 34 | var showmode = (int)showModeField.GetValue(win); 35 | if (showmode == 4) { 36 | var pos = (Rect)positionProperty.GetValue(win, null); 37 | return pos; 38 | } 39 | } 40 | throw new System.NotSupportedException("Can't find internal main window. Maybe something has changed inside Unity"); 41 | } 42 | 43 | public static Rect GetCenterRect (Vector2 windowSize) { 44 | var main = GetEditorMainWindowPos(); 45 | float w = (main.width - windowSize.x) * 0.5f; 46 | float h = (main.height - windowSize.y) * 0.5f; 47 | return new Rect(main.x + w, main.y + h, windowSize.x, windowSize.y); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal/EditorWindowUtility.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f207647870af99047a5f8cdaac7b4b38 3 | timeCreated: 1473955817 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal/Pool.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | 6 | namespace QuickSearch { 7 | 8 | internal sealed class Pool { 9 | private readonly Queue queue_ = null; 10 | private readonly Func allocator_ = null; 11 | 12 | public Pool (Func allocator, int capacity) { 13 | queue_ = new Queue(capacity); 14 | allocator_ = allocator; 15 | 16 | for (var i = 0; i < capacity; ++i) { 17 | var obj = allocator(); 18 | queue_.Enqueue(obj); 19 | } 20 | } 21 | 22 | public T Alloc () { 23 | if (queue_.Count > 0) 24 | return queue_.Dequeue(); 25 | return allocator_(); 26 | } 27 | 28 | public void Dealloc (T obj) { 29 | queue_.Enqueue(obj); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Internal/Pool.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8932c504d7117844a8509e1c2e88b61f 3 | timeCreated: 1473999431 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearch.guiskin: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_PrefabParentObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 0} 8 | m_GameObject: {fileID: 0} 9 | m_Enabled: 1 10 | m_EditorHideFlags: 1 11 | m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} 12 | m_Name: QuickSearch 13 | m_EditorClassIdentifier: 14 | m_Font: {fileID: 12800000, guid: 299930e9fd0253841b2c157666da74af, type: 3} 15 | m_box: 16 | m_Name: box 17 | m_Normal: 18 | m_Background: {fileID: 0} 19 | m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} 20 | m_Hover: 21 | m_Background: {fileID: 0} 22 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 23 | m_Active: 24 | m_Background: {fileID: 0} 25 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 26 | m_Focused: 27 | m_Background: {fileID: 0} 28 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 29 | m_OnNormal: 30 | m_Background: {fileID: 0} 31 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 32 | m_OnHover: 33 | m_Background: {fileID: 0} 34 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 35 | m_OnActive: 36 | m_Background: {fileID: 0} 37 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 38 | m_OnFocused: 39 | m_Background: {fileID: 0} 40 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 41 | m_Border: 42 | m_Left: 6 43 | m_Right: 6 44 | m_Top: 6 45 | m_Bottom: 6 46 | m_Margin: 47 | m_Left: 4 48 | m_Right: 4 49 | m_Top: 4 50 | m_Bottom: 4 51 | m_Padding: 52 | m_Left: 4 53 | m_Right: 4 54 | m_Top: 4 55 | m_Bottom: 4 56 | m_Overflow: 57 | m_Left: 0 58 | m_Right: 0 59 | m_Top: 0 60 | m_Bottom: 0 61 | m_Font: {fileID: 0} 62 | m_FontSize: 0 63 | m_FontStyle: 0 64 | m_Alignment: 1 65 | m_WordWrap: 0 66 | m_RichText: 1 67 | m_TextClipping: 1 68 | m_ImagePosition: 0 69 | m_ContentOffset: {x: 0, y: 0} 70 | m_FixedWidth: 0 71 | m_FixedHeight: 0 72 | m_StretchWidth: 1 73 | m_StretchHeight: 0 74 | m_button: 75 | m_Name: button 76 | m_Normal: 77 | m_Background: {fileID: 11006, guid: 0000000000000000e000000000000000, type: 0} 78 | m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} 79 | m_Hover: 80 | m_Background: {fileID: 11003, guid: 0000000000000000e000000000000000, type: 0} 81 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 82 | m_Active: 83 | m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} 84 | m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} 85 | m_Focused: 86 | m_Background: {fileID: 0} 87 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 88 | m_OnNormal: 89 | m_Background: {fileID: 11005, guid: 0000000000000000e000000000000000, type: 0} 90 | m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} 91 | m_OnHover: 92 | m_Background: {fileID: 11004, guid: 0000000000000000e000000000000000, type: 0} 93 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 94 | m_OnActive: 95 | m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} 96 | m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} 97 | m_OnFocused: 98 | m_Background: {fileID: 0} 99 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 100 | m_Border: 101 | m_Left: 6 102 | m_Right: 6 103 | m_Top: 6 104 | m_Bottom: 4 105 | m_Margin: 106 | m_Left: 4 107 | m_Right: 4 108 | m_Top: 4 109 | m_Bottom: 4 110 | m_Padding: 111 | m_Left: 6 112 | m_Right: 6 113 | m_Top: 3 114 | m_Bottom: 3 115 | m_Overflow: 116 | m_Left: 0 117 | m_Right: 0 118 | m_Top: 0 119 | m_Bottom: 0 120 | m_Font: {fileID: 0} 121 | m_FontSize: 0 122 | m_FontStyle: 0 123 | m_Alignment: 4 124 | m_WordWrap: 0 125 | m_RichText: 1 126 | m_TextClipping: 1 127 | m_ImagePosition: 0 128 | m_ContentOffset: {x: 0, y: 0} 129 | m_FixedWidth: 0 130 | m_FixedHeight: 0 131 | m_StretchWidth: 1 132 | m_StretchHeight: 0 133 | m_toggle: 134 | m_Name: toggle 135 | m_Normal: 136 | m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} 137 | m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} 138 | m_Hover: 139 | m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} 140 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 141 | m_Active: 142 | m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} 143 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 144 | m_Focused: 145 | m_Background: {fileID: 0} 146 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 147 | m_OnNormal: 148 | m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} 149 | m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} 150 | m_OnHover: 151 | m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} 152 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 153 | m_OnActive: 154 | m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} 155 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 156 | m_OnFocused: 157 | m_Background: {fileID: 0} 158 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 159 | m_Border: 160 | m_Left: 14 161 | m_Right: 0 162 | m_Top: 14 163 | m_Bottom: 0 164 | m_Margin: 165 | m_Left: 4 166 | m_Right: 4 167 | m_Top: 4 168 | m_Bottom: 4 169 | m_Padding: 170 | m_Left: 15 171 | m_Right: 0 172 | m_Top: 3 173 | m_Bottom: 0 174 | m_Overflow: 175 | m_Left: -1 176 | m_Right: 0 177 | m_Top: -4 178 | m_Bottom: 0 179 | m_Font: {fileID: 0} 180 | m_FontSize: 0 181 | m_FontStyle: 0 182 | m_Alignment: 0 183 | m_WordWrap: 0 184 | m_RichText: 1 185 | m_TextClipping: 1 186 | m_ImagePosition: 0 187 | m_ContentOffset: {x: 0, y: 0} 188 | m_FixedWidth: 0 189 | m_FixedHeight: 0 190 | m_StretchWidth: 1 191 | m_StretchHeight: 0 192 | m_label: 193 | m_Name: label 194 | m_Normal: 195 | m_Background: {fileID: 0} 196 | m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} 197 | m_Hover: 198 | m_Background: {fileID: 0} 199 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 200 | m_Active: 201 | m_Background: {fileID: 0} 202 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 203 | m_Focused: 204 | m_Background: {fileID: 0} 205 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 206 | m_OnNormal: 207 | m_Background: {fileID: 0} 208 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 209 | m_OnHover: 210 | m_Background: {fileID: 0} 211 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 212 | m_OnActive: 213 | m_Background: {fileID: 0} 214 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 215 | m_OnFocused: 216 | m_Background: {fileID: 0} 217 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 218 | m_Border: 219 | m_Left: 0 220 | m_Right: 0 221 | m_Top: 0 222 | m_Bottom: 0 223 | m_Margin: 224 | m_Left: 4 225 | m_Right: 4 226 | m_Top: 4 227 | m_Bottom: 4 228 | m_Padding: 229 | m_Left: 0 230 | m_Right: 0 231 | m_Top: 3 232 | m_Bottom: 3 233 | m_Overflow: 234 | m_Left: 0 235 | m_Right: 0 236 | m_Top: 0 237 | m_Bottom: 0 238 | m_Font: {fileID: 12800000, guid: 299930e9fd0253841b2c157666da74af, type: 3} 239 | m_FontSize: 15 240 | m_FontStyle: 0 241 | m_Alignment: 0 242 | m_WordWrap: 1 243 | m_RichText: 1 244 | m_TextClipping: 1 245 | m_ImagePosition: 0 246 | m_ContentOffset: {x: 0, y: 0} 247 | m_FixedWidth: 0 248 | m_FixedHeight: 0 249 | m_StretchWidth: 1 250 | m_StretchHeight: 0 251 | m_textField: 252 | m_Name: textfield 253 | m_Normal: 254 | m_Background: {fileID: 2800000, guid: 5c86540b75b5a8e43a5bbf784d037cf5, type: 3} 255 | m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} 256 | m_Hover: 257 | m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} 258 | m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} 259 | m_Active: 260 | m_Background: {fileID: 0} 261 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 262 | m_Focused: 263 | m_Background: {fileID: 2800000, guid: 5c86540b75b5a8e43a5bbf784d037cf5, type: 3} 264 | m_TextColor: {r: 0, g: 0.44313726, b: 0.85882354, a: 1} 265 | m_OnNormal: 266 | m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} 267 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 268 | m_OnHover: 269 | m_Background: {fileID: 0} 270 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 271 | m_OnActive: 272 | m_Background: {fileID: 0} 273 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 274 | m_OnFocused: 275 | m_Background: {fileID: 0} 276 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 277 | m_Border: 278 | m_Left: 6 279 | m_Right: 6 280 | m_Top: 6 281 | m_Bottom: 6 282 | m_Margin: 283 | m_Left: 4 284 | m_Right: 4 285 | m_Top: 4 286 | m_Bottom: 4 287 | m_Padding: 288 | m_Left: 40 289 | m_Right: 5 290 | m_Top: 5 291 | m_Bottom: 5 292 | m_Overflow: 293 | m_Left: 0 294 | m_Right: 0 295 | m_Top: 0 296 | m_Bottom: 0 297 | m_Font: {fileID: 12800000, guid: 3582ef81e9e378e489516a55b77a94ed, type: 3} 298 | m_FontSize: 24 299 | m_FontStyle: 0 300 | m_Alignment: 0 301 | m_WordWrap: 0 302 | m_RichText: 0 303 | m_TextClipping: 1 304 | m_ImagePosition: 3 305 | m_ContentOffset: {x: 0, y: 0} 306 | m_FixedWidth: 0 307 | m_FixedHeight: 0 308 | m_StretchWidth: 1 309 | m_StretchHeight: 0 310 | m_textArea: 311 | m_Name: textarea 312 | m_Normal: 313 | m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} 314 | m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} 315 | m_Hover: 316 | m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} 317 | m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} 318 | m_Active: 319 | m_Background: {fileID: 0} 320 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 321 | m_Focused: 322 | m_Background: {fileID: 0} 323 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 324 | m_OnNormal: 325 | m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} 326 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 327 | m_OnHover: 328 | m_Background: {fileID: 0} 329 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 330 | m_OnActive: 331 | m_Background: {fileID: 0} 332 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 333 | m_OnFocused: 334 | m_Background: {fileID: 0} 335 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 336 | m_Border: 337 | m_Left: 4 338 | m_Right: 4 339 | m_Top: 4 340 | m_Bottom: 4 341 | m_Margin: 342 | m_Left: 4 343 | m_Right: 4 344 | m_Top: 4 345 | m_Bottom: 4 346 | m_Padding: 347 | m_Left: 3 348 | m_Right: 3 349 | m_Top: 3 350 | m_Bottom: 3 351 | m_Overflow: 352 | m_Left: 0 353 | m_Right: 0 354 | m_Top: 0 355 | m_Bottom: 0 356 | m_Font: {fileID: 0} 357 | m_FontSize: 0 358 | m_FontStyle: 0 359 | m_Alignment: 0 360 | m_WordWrap: 1 361 | m_RichText: 0 362 | m_TextClipping: 1 363 | m_ImagePosition: 0 364 | m_ContentOffset: {x: 0, y: 0} 365 | m_FixedWidth: 0 366 | m_FixedHeight: 0 367 | m_StretchWidth: 1 368 | m_StretchHeight: 0 369 | m_window: 370 | m_Name: window 371 | m_Normal: 372 | m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} 373 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 374 | m_Hover: 375 | m_Background: {fileID: 0} 376 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 377 | m_Active: 378 | m_Background: {fileID: 0} 379 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 380 | m_Focused: 381 | m_Background: {fileID: 0} 382 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 383 | m_OnNormal: 384 | m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} 385 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 386 | m_OnHover: 387 | m_Background: {fileID: 0} 388 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 389 | m_OnActive: 390 | m_Background: {fileID: 0} 391 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 392 | m_OnFocused: 393 | m_Background: {fileID: 0} 394 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 395 | m_Border: 396 | m_Left: 8 397 | m_Right: 8 398 | m_Top: 18 399 | m_Bottom: 8 400 | m_Margin: 401 | m_Left: 0 402 | m_Right: 0 403 | m_Top: 0 404 | m_Bottom: 0 405 | m_Padding: 406 | m_Left: 10 407 | m_Right: 10 408 | m_Top: 20 409 | m_Bottom: 10 410 | m_Overflow: 411 | m_Left: 0 412 | m_Right: 0 413 | m_Top: 0 414 | m_Bottom: 0 415 | m_Font: {fileID: 0} 416 | m_FontSize: 0 417 | m_FontStyle: 0 418 | m_Alignment: 1 419 | m_WordWrap: 0 420 | m_RichText: 1 421 | m_TextClipping: 1 422 | m_ImagePosition: 0 423 | m_ContentOffset: {x: 0, y: -18} 424 | m_FixedWidth: 0 425 | m_FixedHeight: 0 426 | m_StretchWidth: 1 427 | m_StretchHeight: 0 428 | m_horizontalSlider: 429 | m_Name: horizontalslider 430 | m_Normal: 431 | m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} 432 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 433 | m_Hover: 434 | m_Background: {fileID: 0} 435 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 436 | m_Active: 437 | m_Background: {fileID: 0} 438 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 439 | m_Focused: 440 | m_Background: {fileID: 0} 441 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 442 | m_OnNormal: 443 | m_Background: {fileID: 0} 444 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 445 | m_OnHover: 446 | m_Background: {fileID: 0} 447 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 448 | m_OnActive: 449 | m_Background: {fileID: 0} 450 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 451 | m_OnFocused: 452 | m_Background: {fileID: 0} 453 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 454 | m_Border: 455 | m_Left: 3 456 | m_Right: 3 457 | m_Top: 0 458 | m_Bottom: 0 459 | m_Margin: 460 | m_Left: 4 461 | m_Right: 4 462 | m_Top: 4 463 | m_Bottom: 4 464 | m_Padding: 465 | m_Left: -1 466 | m_Right: -1 467 | m_Top: 0 468 | m_Bottom: 0 469 | m_Overflow: 470 | m_Left: 0 471 | m_Right: 0 472 | m_Top: -2 473 | m_Bottom: -3 474 | m_Font: {fileID: 0} 475 | m_FontSize: 0 476 | m_FontStyle: 0 477 | m_Alignment: 0 478 | m_WordWrap: 0 479 | m_RichText: 1 480 | m_TextClipping: 1 481 | m_ImagePosition: 2 482 | m_ContentOffset: {x: 0, y: 0} 483 | m_FixedWidth: 0 484 | m_FixedHeight: 12 485 | m_StretchWidth: 1 486 | m_StretchHeight: 0 487 | m_horizontalSliderThumb: 488 | m_Name: horizontalsliderthumb 489 | m_Normal: 490 | m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} 491 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 492 | m_Hover: 493 | m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} 494 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 495 | m_Active: 496 | m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} 497 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 498 | m_Focused: 499 | m_Background: {fileID: 0} 500 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 501 | m_OnNormal: 502 | m_Background: {fileID: 0} 503 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 504 | m_OnHover: 505 | m_Background: {fileID: 0} 506 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 507 | m_OnActive: 508 | m_Background: {fileID: 0} 509 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 510 | m_OnFocused: 511 | m_Background: {fileID: 0} 512 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 513 | m_Border: 514 | m_Left: 4 515 | m_Right: 4 516 | m_Top: 0 517 | m_Bottom: 0 518 | m_Margin: 519 | m_Left: 0 520 | m_Right: 0 521 | m_Top: 0 522 | m_Bottom: 0 523 | m_Padding: 524 | m_Left: 7 525 | m_Right: 7 526 | m_Top: 0 527 | m_Bottom: 0 528 | m_Overflow: 529 | m_Left: -1 530 | m_Right: -1 531 | m_Top: 0 532 | m_Bottom: 0 533 | m_Font: {fileID: 0} 534 | m_FontSize: 0 535 | m_FontStyle: 0 536 | m_Alignment: 0 537 | m_WordWrap: 0 538 | m_RichText: 1 539 | m_TextClipping: 1 540 | m_ImagePosition: 2 541 | m_ContentOffset: {x: 0, y: 0} 542 | m_FixedWidth: 0 543 | m_FixedHeight: 12 544 | m_StretchWidth: 1 545 | m_StretchHeight: 0 546 | m_verticalSlider: 547 | m_Name: verticalslider 548 | m_Normal: 549 | m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} 550 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 551 | m_Hover: 552 | m_Background: {fileID: 0} 553 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 554 | m_Active: 555 | m_Background: {fileID: 0} 556 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 557 | m_Focused: 558 | m_Background: {fileID: 0} 559 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 560 | m_OnNormal: 561 | m_Background: {fileID: 0} 562 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 563 | m_OnHover: 564 | m_Background: {fileID: 0} 565 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 566 | m_OnActive: 567 | m_Background: {fileID: 0} 568 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 569 | m_OnFocused: 570 | m_Background: {fileID: 0} 571 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 572 | m_Border: 573 | m_Left: 0 574 | m_Right: 0 575 | m_Top: 3 576 | m_Bottom: 3 577 | m_Margin: 578 | m_Left: 4 579 | m_Right: 4 580 | m_Top: 4 581 | m_Bottom: 4 582 | m_Padding: 583 | m_Left: 0 584 | m_Right: 0 585 | m_Top: -1 586 | m_Bottom: -1 587 | m_Overflow: 588 | m_Left: -2 589 | m_Right: -3 590 | m_Top: 0 591 | m_Bottom: 0 592 | m_Font: {fileID: 0} 593 | m_FontSize: 0 594 | m_FontStyle: 0 595 | m_Alignment: 0 596 | m_WordWrap: 0 597 | m_RichText: 1 598 | m_TextClipping: 0 599 | m_ImagePosition: 0 600 | m_ContentOffset: {x: 0, y: 0} 601 | m_FixedWidth: 12 602 | m_FixedHeight: 0 603 | m_StretchWidth: 0 604 | m_StretchHeight: 1 605 | m_verticalSliderThumb: 606 | m_Name: verticalsliderthumb 607 | m_Normal: 608 | m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} 609 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 610 | m_Hover: 611 | m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} 612 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 613 | m_Active: 614 | m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} 615 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 616 | m_Focused: 617 | m_Background: {fileID: 0} 618 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 619 | m_OnNormal: 620 | m_Background: {fileID: 0} 621 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 622 | m_OnHover: 623 | m_Background: {fileID: 0} 624 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 625 | m_OnActive: 626 | m_Background: {fileID: 0} 627 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 628 | m_OnFocused: 629 | m_Background: {fileID: 0} 630 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 631 | m_Border: 632 | m_Left: 0 633 | m_Right: 0 634 | m_Top: 0 635 | m_Bottom: 0 636 | m_Margin: 637 | m_Left: 0 638 | m_Right: 0 639 | m_Top: 0 640 | m_Bottom: 0 641 | m_Padding: 642 | m_Left: 0 643 | m_Right: 0 644 | m_Top: 7 645 | m_Bottom: 7 646 | m_Overflow: 647 | m_Left: 0 648 | m_Right: 0 649 | m_Top: -1 650 | m_Bottom: -1 651 | m_Font: {fileID: 0} 652 | m_FontSize: 0 653 | m_FontStyle: 0 654 | m_Alignment: 0 655 | m_WordWrap: 0 656 | m_RichText: 1 657 | m_TextClipping: 1 658 | m_ImagePosition: 0 659 | m_ContentOffset: {x: 0, y: 0} 660 | m_FixedWidth: 12 661 | m_FixedHeight: 0 662 | m_StretchWidth: 0 663 | m_StretchHeight: 1 664 | m_horizontalScrollbar: 665 | m_Name: horizontalscrollbar 666 | m_Normal: 667 | m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} 668 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 669 | m_Hover: 670 | m_Background: {fileID: 0} 671 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 672 | m_Active: 673 | m_Background: {fileID: 0} 674 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 675 | m_Focused: 676 | m_Background: {fileID: 0} 677 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 678 | m_OnNormal: 679 | m_Background: {fileID: 0} 680 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 681 | m_OnHover: 682 | m_Background: {fileID: 0} 683 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 684 | m_OnActive: 685 | m_Background: {fileID: 0} 686 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 687 | m_OnFocused: 688 | m_Background: {fileID: 0} 689 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 690 | m_Border: 691 | m_Left: 9 692 | m_Right: 9 693 | m_Top: 0 694 | m_Bottom: 0 695 | m_Margin: 696 | m_Left: 4 697 | m_Right: 4 698 | m_Top: 1 699 | m_Bottom: 4 700 | m_Padding: 701 | m_Left: 0 702 | m_Right: 0 703 | m_Top: 0 704 | m_Bottom: 0 705 | m_Overflow: 706 | m_Left: 0 707 | m_Right: 0 708 | m_Top: 0 709 | m_Bottom: 0 710 | m_Font: {fileID: 0} 711 | m_FontSize: 0 712 | m_FontStyle: 0 713 | m_Alignment: 0 714 | m_WordWrap: 0 715 | m_RichText: 1 716 | m_TextClipping: 1 717 | m_ImagePosition: 2 718 | m_ContentOffset: {x: 0, y: 0} 719 | m_FixedWidth: 0 720 | m_FixedHeight: 15 721 | m_StretchWidth: 1 722 | m_StretchHeight: 0 723 | m_horizontalScrollbarThumb: 724 | m_Name: horizontalscrollbarthumb 725 | m_Normal: 726 | m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} 727 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 728 | m_Hover: 729 | m_Background: {fileID: 0} 730 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 731 | m_Active: 732 | m_Background: {fileID: 0} 733 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 734 | m_Focused: 735 | m_Background: {fileID: 0} 736 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 737 | m_OnNormal: 738 | m_Background: {fileID: 0} 739 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 740 | m_OnHover: 741 | m_Background: {fileID: 0} 742 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 743 | m_OnActive: 744 | m_Background: {fileID: 0} 745 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 746 | m_OnFocused: 747 | m_Background: {fileID: 0} 748 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 749 | m_Border: 750 | m_Left: 6 751 | m_Right: 6 752 | m_Top: 6 753 | m_Bottom: 6 754 | m_Margin: 755 | m_Left: 0 756 | m_Right: 0 757 | m_Top: 0 758 | m_Bottom: 0 759 | m_Padding: 760 | m_Left: 6 761 | m_Right: 6 762 | m_Top: 0 763 | m_Bottom: 0 764 | m_Overflow: 765 | m_Left: 0 766 | m_Right: 0 767 | m_Top: -1 768 | m_Bottom: 1 769 | m_Font: {fileID: 0} 770 | m_FontSize: 0 771 | m_FontStyle: 0 772 | m_Alignment: 0 773 | m_WordWrap: 0 774 | m_RichText: 1 775 | m_TextClipping: 1 776 | m_ImagePosition: 0 777 | m_ContentOffset: {x: 0, y: 0} 778 | m_FixedWidth: 0 779 | m_FixedHeight: 13 780 | m_StretchWidth: 1 781 | m_StretchHeight: 0 782 | m_horizontalScrollbarLeftButton: 783 | m_Name: horizontalscrollbarleftbutton 784 | m_Normal: 785 | m_Background: {fileID: 0} 786 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 787 | m_Hover: 788 | m_Background: {fileID: 0} 789 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 790 | m_Active: 791 | m_Background: {fileID: 0} 792 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 793 | m_Focused: 794 | m_Background: {fileID: 0} 795 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 796 | m_OnNormal: 797 | m_Background: {fileID: 0} 798 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 799 | m_OnHover: 800 | m_Background: {fileID: 0} 801 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 802 | m_OnActive: 803 | m_Background: {fileID: 0} 804 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 805 | m_OnFocused: 806 | m_Background: {fileID: 0} 807 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 808 | m_Border: 809 | m_Left: 0 810 | m_Right: 0 811 | m_Top: 0 812 | m_Bottom: 0 813 | m_Margin: 814 | m_Left: 0 815 | m_Right: 0 816 | m_Top: 0 817 | m_Bottom: 0 818 | m_Padding: 819 | m_Left: 0 820 | m_Right: 0 821 | m_Top: 0 822 | m_Bottom: 0 823 | m_Overflow: 824 | m_Left: 0 825 | m_Right: 0 826 | m_Top: 0 827 | m_Bottom: 0 828 | m_Font: {fileID: 0} 829 | m_FontSize: 0 830 | m_FontStyle: 0 831 | m_Alignment: 0 832 | m_WordWrap: 0 833 | m_RichText: 1 834 | m_TextClipping: 1 835 | m_ImagePosition: 0 836 | m_ContentOffset: {x: 0, y: 0} 837 | m_FixedWidth: 0 838 | m_FixedHeight: 0 839 | m_StretchWidth: 1 840 | m_StretchHeight: 0 841 | m_horizontalScrollbarRightButton: 842 | m_Name: horizontalscrollbarrightbutton 843 | m_Normal: 844 | m_Background: {fileID: 0} 845 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 846 | m_Hover: 847 | m_Background: {fileID: 0} 848 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 849 | m_Active: 850 | m_Background: {fileID: 0} 851 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 852 | m_Focused: 853 | m_Background: {fileID: 0} 854 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 855 | m_OnNormal: 856 | m_Background: {fileID: 0} 857 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 858 | m_OnHover: 859 | m_Background: {fileID: 0} 860 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 861 | m_OnActive: 862 | m_Background: {fileID: 0} 863 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 864 | m_OnFocused: 865 | m_Background: {fileID: 0} 866 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 867 | m_Border: 868 | m_Left: 0 869 | m_Right: 0 870 | m_Top: 0 871 | m_Bottom: 0 872 | m_Margin: 873 | m_Left: 0 874 | m_Right: 0 875 | m_Top: 0 876 | m_Bottom: 0 877 | m_Padding: 878 | m_Left: 0 879 | m_Right: 0 880 | m_Top: 0 881 | m_Bottom: 0 882 | m_Overflow: 883 | m_Left: 0 884 | m_Right: 0 885 | m_Top: 0 886 | m_Bottom: 0 887 | m_Font: {fileID: 0} 888 | m_FontSize: 0 889 | m_FontStyle: 0 890 | m_Alignment: 0 891 | m_WordWrap: 0 892 | m_RichText: 1 893 | m_TextClipping: 1 894 | m_ImagePosition: 0 895 | m_ContentOffset: {x: 0, y: 0} 896 | m_FixedWidth: 0 897 | m_FixedHeight: 0 898 | m_StretchWidth: 1 899 | m_StretchHeight: 0 900 | m_verticalScrollbar: 901 | m_Name: verticalscrollbar 902 | m_Normal: 903 | m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} 904 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 905 | m_Hover: 906 | m_Background: {fileID: 0} 907 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 908 | m_Active: 909 | m_Background: {fileID: 0} 910 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 911 | m_Focused: 912 | m_Background: {fileID: 0} 913 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 914 | m_OnNormal: 915 | m_Background: {fileID: 0} 916 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 917 | m_OnHover: 918 | m_Background: {fileID: 0} 919 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 920 | m_OnActive: 921 | m_Background: {fileID: 0} 922 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 923 | m_OnFocused: 924 | m_Background: {fileID: 0} 925 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 926 | m_Border: 927 | m_Left: 0 928 | m_Right: 0 929 | m_Top: 9 930 | m_Bottom: 9 931 | m_Margin: 932 | m_Left: 1 933 | m_Right: 4 934 | m_Top: 4 935 | m_Bottom: 4 936 | m_Padding: 937 | m_Left: 0 938 | m_Right: 0 939 | m_Top: 1 940 | m_Bottom: 1 941 | m_Overflow: 942 | m_Left: 0 943 | m_Right: 0 944 | m_Top: 0 945 | m_Bottom: 0 946 | m_Font: {fileID: 0} 947 | m_FontSize: 0 948 | m_FontStyle: 0 949 | m_Alignment: 0 950 | m_WordWrap: 0 951 | m_RichText: 1 952 | m_TextClipping: 1 953 | m_ImagePosition: 0 954 | m_ContentOffset: {x: 0, y: 0} 955 | m_FixedWidth: 15 956 | m_FixedHeight: 0 957 | m_StretchWidth: 1 958 | m_StretchHeight: 0 959 | m_verticalScrollbarThumb: 960 | m_Name: verticalscrollbarthumb 961 | m_Normal: 962 | m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} 963 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 964 | m_Hover: 965 | m_Background: {fileID: 0} 966 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 967 | m_Active: 968 | m_Background: {fileID: 0} 969 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 970 | m_Focused: 971 | m_Background: {fileID: 0} 972 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 973 | m_OnNormal: 974 | m_Background: {fileID: 0} 975 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 976 | m_OnHover: 977 | m_Background: {fileID: 0} 978 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 979 | m_OnActive: 980 | m_Background: {fileID: 0} 981 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 982 | m_OnFocused: 983 | m_Background: {fileID: 0} 984 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 985 | m_Border: 986 | m_Left: 6 987 | m_Right: 6 988 | m_Top: 6 989 | m_Bottom: 6 990 | m_Margin: 991 | m_Left: 0 992 | m_Right: 0 993 | m_Top: 0 994 | m_Bottom: 0 995 | m_Padding: 996 | m_Left: 0 997 | m_Right: 0 998 | m_Top: 6 999 | m_Bottom: 6 1000 | m_Overflow: 1001 | m_Left: -1 1002 | m_Right: -1 1003 | m_Top: 0 1004 | m_Bottom: 0 1005 | m_Font: {fileID: 0} 1006 | m_FontSize: 0 1007 | m_FontStyle: 0 1008 | m_Alignment: 0 1009 | m_WordWrap: 0 1010 | m_RichText: 1 1011 | m_TextClipping: 1 1012 | m_ImagePosition: 2 1013 | m_ContentOffset: {x: 0, y: 0} 1014 | m_FixedWidth: 15 1015 | m_FixedHeight: 0 1016 | m_StretchWidth: 0 1017 | m_StretchHeight: 1 1018 | m_verticalScrollbarUpButton: 1019 | m_Name: verticalscrollbarupbutton 1020 | m_Normal: 1021 | m_Background: {fileID: 0} 1022 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1023 | m_Hover: 1024 | m_Background: {fileID: 0} 1025 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1026 | m_Active: 1027 | m_Background: {fileID: 0} 1028 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1029 | m_Focused: 1030 | m_Background: {fileID: 0} 1031 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1032 | m_OnNormal: 1033 | m_Background: {fileID: 0} 1034 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1035 | m_OnHover: 1036 | m_Background: {fileID: 0} 1037 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1038 | m_OnActive: 1039 | m_Background: {fileID: 0} 1040 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1041 | m_OnFocused: 1042 | m_Background: {fileID: 0} 1043 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1044 | m_Border: 1045 | m_Left: 0 1046 | m_Right: 0 1047 | m_Top: 0 1048 | m_Bottom: 0 1049 | m_Margin: 1050 | m_Left: 0 1051 | m_Right: 0 1052 | m_Top: 0 1053 | m_Bottom: 0 1054 | m_Padding: 1055 | m_Left: 0 1056 | m_Right: 0 1057 | m_Top: 0 1058 | m_Bottom: 0 1059 | m_Overflow: 1060 | m_Left: 0 1061 | m_Right: 0 1062 | m_Top: 0 1063 | m_Bottom: 0 1064 | m_Font: {fileID: 0} 1065 | m_FontSize: 0 1066 | m_FontStyle: 0 1067 | m_Alignment: 0 1068 | m_WordWrap: 0 1069 | m_RichText: 1 1070 | m_TextClipping: 1 1071 | m_ImagePosition: 0 1072 | m_ContentOffset: {x: 0, y: 0} 1073 | m_FixedWidth: 0 1074 | m_FixedHeight: 0 1075 | m_StretchWidth: 1 1076 | m_StretchHeight: 0 1077 | m_verticalScrollbarDownButton: 1078 | m_Name: verticalscrollbardownbutton 1079 | m_Normal: 1080 | m_Background: {fileID: 0} 1081 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1082 | m_Hover: 1083 | m_Background: {fileID: 0} 1084 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1085 | m_Active: 1086 | m_Background: {fileID: 0} 1087 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1088 | m_Focused: 1089 | m_Background: {fileID: 0} 1090 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1091 | m_OnNormal: 1092 | m_Background: {fileID: 0} 1093 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1094 | m_OnHover: 1095 | m_Background: {fileID: 0} 1096 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1097 | m_OnActive: 1098 | m_Background: {fileID: 0} 1099 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1100 | m_OnFocused: 1101 | m_Background: {fileID: 0} 1102 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1103 | m_Border: 1104 | m_Left: 0 1105 | m_Right: 0 1106 | m_Top: 0 1107 | m_Bottom: 0 1108 | m_Margin: 1109 | m_Left: 0 1110 | m_Right: 0 1111 | m_Top: 0 1112 | m_Bottom: 0 1113 | m_Padding: 1114 | m_Left: 0 1115 | m_Right: 0 1116 | m_Top: 0 1117 | m_Bottom: 0 1118 | m_Overflow: 1119 | m_Left: 0 1120 | m_Right: 0 1121 | m_Top: 0 1122 | m_Bottom: 0 1123 | m_Font: {fileID: 0} 1124 | m_FontSize: 0 1125 | m_FontStyle: 0 1126 | m_Alignment: 0 1127 | m_WordWrap: 0 1128 | m_RichText: 1 1129 | m_TextClipping: 1 1130 | m_ImagePosition: 0 1131 | m_ContentOffset: {x: 0, y: 0} 1132 | m_FixedWidth: 0 1133 | m_FixedHeight: 0 1134 | m_StretchWidth: 1 1135 | m_StretchHeight: 0 1136 | m_ScrollView: 1137 | m_Name: scrollview 1138 | m_Normal: 1139 | m_Background: {fileID: 0} 1140 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1141 | m_Hover: 1142 | m_Background: {fileID: 0} 1143 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1144 | m_Active: 1145 | m_Background: {fileID: 0} 1146 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1147 | m_Focused: 1148 | m_Background: {fileID: 0} 1149 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1150 | m_OnNormal: 1151 | m_Background: {fileID: 0} 1152 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1153 | m_OnHover: 1154 | m_Background: {fileID: 0} 1155 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1156 | m_OnActive: 1157 | m_Background: {fileID: 0} 1158 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1159 | m_OnFocused: 1160 | m_Background: {fileID: 0} 1161 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1162 | m_Border: 1163 | m_Left: 0 1164 | m_Right: 0 1165 | m_Top: 0 1166 | m_Bottom: 0 1167 | m_Margin: 1168 | m_Left: 0 1169 | m_Right: 0 1170 | m_Top: 0 1171 | m_Bottom: 0 1172 | m_Padding: 1173 | m_Left: 0 1174 | m_Right: 0 1175 | m_Top: 0 1176 | m_Bottom: 0 1177 | m_Overflow: 1178 | m_Left: 0 1179 | m_Right: 0 1180 | m_Top: 0 1181 | m_Bottom: 0 1182 | m_Font: {fileID: 0} 1183 | m_FontSize: 0 1184 | m_FontStyle: 0 1185 | m_Alignment: 0 1186 | m_WordWrap: 0 1187 | m_RichText: 1 1188 | m_TextClipping: 1 1189 | m_ImagePosition: 0 1190 | m_ContentOffset: {x: 0, y: 0} 1191 | m_FixedWidth: 0 1192 | m_FixedHeight: 0 1193 | m_StretchWidth: 1 1194 | m_StretchHeight: 0 1195 | m_CustomStyles: 1196 | - m_Name: elem_bg_normal 1197 | m_Normal: 1198 | m_Background: {fileID: 0} 1199 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1200 | m_Hover: 1201 | m_Background: {fileID: 0} 1202 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1203 | m_Active: 1204 | m_Background: {fileID: 0} 1205 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1206 | m_Focused: 1207 | m_Background: {fileID: 0} 1208 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1209 | m_OnNormal: 1210 | m_Background: {fileID: 0} 1211 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1212 | m_OnHover: 1213 | m_Background: {fileID: 0} 1214 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1215 | m_OnActive: 1216 | m_Background: {fileID: 0} 1217 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1218 | m_OnFocused: 1219 | m_Background: {fileID: 0} 1220 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1221 | m_Border: 1222 | m_Left: 0 1223 | m_Right: 0 1224 | m_Top: 0 1225 | m_Bottom: 0 1226 | m_Margin: 1227 | m_Left: 0 1228 | m_Right: 0 1229 | m_Top: 0 1230 | m_Bottom: 0 1231 | m_Padding: 1232 | m_Left: 0 1233 | m_Right: 0 1234 | m_Top: 0 1235 | m_Bottom: 0 1236 | m_Overflow: 1237 | m_Left: 0 1238 | m_Right: 0 1239 | m_Top: 0 1240 | m_Bottom: 0 1241 | m_Font: {fileID: 0} 1242 | m_FontSize: 0 1243 | m_FontStyle: 0 1244 | m_Alignment: 0 1245 | m_WordWrap: 0 1246 | m_RichText: 0 1247 | m_TextClipping: 0 1248 | m_ImagePosition: 0 1249 | m_ContentOffset: {x: 0, y: 0} 1250 | m_FixedWidth: 0 1251 | m_FixedHeight: 0 1252 | m_StretchWidth: 0 1253 | m_StretchHeight: 0 1254 | - m_Name: elem_bg_hover 1255 | m_Normal: 1256 | m_Background: {fileID: 2800000, guid: 8171cde582d397f40952a0a72a199ac5, type: 3} 1257 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1258 | m_Hover: 1259 | m_Background: {fileID: 0} 1260 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1261 | m_Active: 1262 | m_Background: {fileID: 0} 1263 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1264 | m_Focused: 1265 | m_Background: {fileID: 0} 1266 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1267 | m_OnNormal: 1268 | m_Background: {fileID: 0} 1269 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1270 | m_OnHover: 1271 | m_Background: {fileID: 0} 1272 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1273 | m_OnActive: 1274 | m_Background: {fileID: 0} 1275 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1276 | m_OnFocused: 1277 | m_Background: {fileID: 0} 1278 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1279 | m_Border: 1280 | m_Left: 6 1281 | m_Right: 6 1282 | m_Top: 6 1283 | m_Bottom: 6 1284 | m_Margin: 1285 | m_Left: 4 1286 | m_Right: 4 1287 | m_Top: 4 1288 | m_Bottom: 4 1289 | m_Padding: 1290 | m_Left: 0 1291 | m_Right: 0 1292 | m_Top: 0 1293 | m_Bottom: 0 1294 | m_Overflow: 1295 | m_Left: 0 1296 | m_Right: 0 1297 | m_Top: 0 1298 | m_Bottom: 0 1299 | m_Font: {fileID: 0} 1300 | m_FontSize: 0 1301 | m_FontStyle: 0 1302 | m_Alignment: 0 1303 | m_WordWrap: 0 1304 | m_RichText: 0 1305 | m_TextClipping: 0 1306 | m_ImagePosition: 0 1307 | m_ContentOffset: {x: 0, y: 0} 1308 | m_FixedWidth: 0 1309 | m_FixedHeight: 0 1310 | m_StretchWidth: 1 1311 | m_StretchHeight: 0 1312 | - m_Name: elem_bg_selected 1313 | m_Normal: 1314 | m_Background: {fileID: 2800000, guid: 0bdad43329cd7534ab1bf8ed4c819e31, type: 3} 1315 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1316 | m_Hover: 1317 | m_Background: {fileID: 0} 1318 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1319 | m_Active: 1320 | m_Background: {fileID: 0} 1321 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1322 | m_Focused: 1323 | m_Background: {fileID: 0} 1324 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1325 | m_OnNormal: 1326 | m_Background: {fileID: 0} 1327 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1328 | m_OnHover: 1329 | m_Background: {fileID: 0} 1330 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1331 | m_OnActive: 1332 | m_Background: {fileID: 0} 1333 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1334 | m_OnFocused: 1335 | m_Background: {fileID: 0} 1336 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1337 | m_Border: 1338 | m_Left: 6 1339 | m_Right: 6 1340 | m_Top: 6 1341 | m_Bottom: 6 1342 | m_Margin: 1343 | m_Left: 4 1344 | m_Right: 4 1345 | m_Top: 4 1346 | m_Bottom: 4 1347 | m_Padding: 1348 | m_Left: 0 1349 | m_Right: 0 1350 | m_Top: 0 1351 | m_Bottom: 0 1352 | m_Overflow: 1353 | m_Left: 0 1354 | m_Right: 0 1355 | m_Top: 0 1356 | m_Bottom: 0 1357 | m_Font: {fileID: 0} 1358 | m_FontSize: 0 1359 | m_FontStyle: 0 1360 | m_Alignment: 0 1361 | m_WordWrap: 0 1362 | m_RichText: 0 1363 | m_TextClipping: 0 1364 | m_ImagePosition: 0 1365 | m_ContentOffset: {x: 0, y: 0} 1366 | m_FixedWidth: 0 1367 | m_FixedHeight: 0 1368 | m_StretchWidth: 1 1369 | m_StretchHeight: 0 1370 | - m_Name: title_normal 1371 | m_Normal: 1372 | m_Background: {fileID: 0} 1373 | m_TextColor: {r: 0, g: 0, b: 0, a: 1} 1374 | m_Hover: 1375 | m_Background: {fileID: 0} 1376 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1377 | m_Active: 1378 | m_Background: {fileID: 0} 1379 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1380 | m_Focused: 1381 | m_Background: {fileID: 0} 1382 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1383 | m_OnNormal: 1384 | m_Background: {fileID: 0} 1385 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1386 | m_OnHover: 1387 | m_Background: {fileID: 0} 1388 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1389 | m_OnActive: 1390 | m_Background: {fileID: 0} 1391 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1392 | m_OnFocused: 1393 | m_Background: {fileID: 0} 1394 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1395 | m_Border: 1396 | m_Left: 4 1397 | m_Right: 4 1398 | m_Top: 4 1399 | m_Bottom: 4 1400 | m_Margin: 1401 | m_Left: 4 1402 | m_Right: 4 1403 | m_Top: 4 1404 | m_Bottom: 4 1405 | m_Padding: 1406 | m_Left: 0 1407 | m_Right: 0 1408 | m_Top: 0 1409 | m_Bottom: 0 1410 | m_Overflow: 1411 | m_Left: 0 1412 | m_Right: 0 1413 | m_Top: 0 1414 | m_Bottom: 0 1415 | m_Font: {fileID: 12800000, guid: 299930e9fd0253841b2c157666da74af, type: 3} 1416 | m_FontSize: 18 1417 | m_FontStyle: 0 1418 | m_Alignment: 0 1419 | m_WordWrap: 0 1420 | m_RichText: 1 1421 | m_TextClipping: 0 1422 | m_ImagePosition: 0 1423 | m_ContentOffset: {x: 0, y: 0} 1424 | m_FixedWidth: 0 1425 | m_FixedHeight: 0 1426 | m_StretchWidth: 0 1427 | m_StretchHeight: 0 1428 | - m_Name: title_selected 1429 | m_Normal: 1430 | m_Background: {fileID: 0} 1431 | m_TextColor: {r: 1, g: 1, b: 1, a: 1} 1432 | m_Hover: 1433 | m_Background: {fileID: 0} 1434 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1435 | m_Active: 1436 | m_Background: {fileID: 0} 1437 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1438 | m_Focused: 1439 | m_Background: {fileID: 0} 1440 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1441 | m_OnNormal: 1442 | m_Background: {fileID: 0} 1443 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1444 | m_OnHover: 1445 | m_Background: {fileID: 0} 1446 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1447 | m_OnActive: 1448 | m_Background: {fileID: 0} 1449 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1450 | m_OnFocused: 1451 | m_Background: {fileID: 0} 1452 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1453 | m_Border: 1454 | m_Left: 4 1455 | m_Right: 4 1456 | m_Top: 4 1457 | m_Bottom: 4 1458 | m_Margin: 1459 | m_Left: 4 1460 | m_Right: 4 1461 | m_Top: 4 1462 | m_Bottom: 4 1463 | m_Padding: 1464 | m_Left: 0 1465 | m_Right: 0 1466 | m_Top: 0 1467 | m_Bottom: 0 1468 | m_Overflow: 1469 | m_Left: 0 1470 | m_Right: 0 1471 | m_Top: 0 1472 | m_Bottom: 0 1473 | m_Font: {fileID: 12800000, guid: 3582ef81e9e378e489516a55b77a94ed, type: 3} 1474 | m_FontSize: 18 1475 | m_FontStyle: 0 1476 | m_Alignment: 0 1477 | m_WordWrap: 0 1478 | m_RichText: 1 1479 | m_TextClipping: 0 1480 | m_ImagePosition: 0 1481 | m_ContentOffset: {x: 0, y: 0} 1482 | m_FixedWidth: 0 1483 | m_FixedHeight: 0 1484 | m_StretchWidth: 0 1485 | m_StretchHeight: 0 1486 | - m_Name: desc_normal 1487 | m_Normal: 1488 | m_Background: {fileID: 0} 1489 | m_TextColor: {r: 0.50994813, g: 0.5197471, b: 0.5294118, a: 1} 1490 | m_Hover: 1491 | m_Background: {fileID: 0} 1492 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1493 | m_Active: 1494 | m_Background: {fileID: 0} 1495 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1496 | m_Focused: 1497 | m_Background: {fileID: 0} 1498 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1499 | m_OnNormal: 1500 | m_Background: {fileID: 0} 1501 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1502 | m_OnHover: 1503 | m_Background: {fileID: 0} 1504 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1505 | m_OnActive: 1506 | m_Background: {fileID: 0} 1507 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1508 | m_OnFocused: 1509 | m_Background: {fileID: 0} 1510 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1511 | m_Border: 1512 | m_Left: 4 1513 | m_Right: 4 1514 | m_Top: 4 1515 | m_Bottom: 4 1516 | m_Margin: 1517 | m_Left: 4 1518 | m_Right: 4 1519 | m_Top: 4 1520 | m_Bottom: 4 1521 | m_Padding: 1522 | m_Left: 0 1523 | m_Right: 0 1524 | m_Top: 0 1525 | m_Bottom: 0 1526 | m_Overflow: 1527 | m_Left: 0 1528 | m_Right: 0 1529 | m_Top: 0 1530 | m_Bottom: 0 1531 | m_Font: {fileID: 12800000, guid: 3582ef81e9e378e489516a55b77a94ed, type: 3} 1532 | m_FontSize: 13 1533 | m_FontStyle: 0 1534 | m_Alignment: 0 1535 | m_WordWrap: 0 1536 | m_RichText: 1 1537 | m_TextClipping: 0 1538 | m_ImagePosition: 0 1539 | m_ContentOffset: {x: 0, y: 0} 1540 | m_FixedWidth: 0 1541 | m_FixedHeight: 0 1542 | m_StretchWidth: 0 1543 | m_StretchHeight: 0 1544 | - m_Name: desc_selected 1545 | m_Normal: 1546 | m_Background: {fileID: 0} 1547 | m_TextColor: {r: 0.9025773, g: 0.9044118, b: 0.87116134, a: 1} 1548 | m_Hover: 1549 | m_Background: {fileID: 0} 1550 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1551 | m_Active: 1552 | m_Background: {fileID: 0} 1553 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1554 | m_Focused: 1555 | m_Background: {fileID: 0} 1556 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1557 | m_OnNormal: 1558 | m_Background: {fileID: 0} 1559 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1560 | m_OnHover: 1561 | m_Background: {fileID: 0} 1562 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1563 | m_OnActive: 1564 | m_Background: {fileID: 0} 1565 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1566 | m_OnFocused: 1567 | m_Background: {fileID: 0} 1568 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1569 | m_Border: 1570 | m_Left: 4 1571 | m_Right: 4 1572 | m_Top: 4 1573 | m_Bottom: 4 1574 | m_Margin: 1575 | m_Left: 4 1576 | m_Right: 4 1577 | m_Top: 4 1578 | m_Bottom: 4 1579 | m_Padding: 1580 | m_Left: 0 1581 | m_Right: 0 1582 | m_Top: 0 1583 | m_Bottom: 0 1584 | m_Overflow: 1585 | m_Left: 0 1586 | m_Right: 0 1587 | m_Top: 0 1588 | m_Bottom: 0 1589 | m_Font: {fileID: 12800000, guid: 3582ef81e9e378e489516a55b77a94ed, type: 3} 1590 | m_FontSize: 13 1591 | m_FontStyle: 0 1592 | m_Alignment: 0 1593 | m_WordWrap: 0 1594 | m_RichText: 1 1595 | m_TextClipping: 0 1596 | m_ImagePosition: 0 1597 | m_ContentOffset: {x: 0, y: 0} 1598 | m_FixedWidth: 0 1599 | m_FixedHeight: 0 1600 | m_StretchWidth: 0 1601 | m_StretchHeight: 0 1602 | - m_Name: head_title 1603 | m_Normal: 1604 | m_Background: {fileID: 0} 1605 | m_TextColor: {r: 0.5955882, g: 0.5955882, b: 0.5955882, a: 1} 1606 | m_Hover: 1607 | m_Background: {fileID: 0} 1608 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1609 | m_Active: 1610 | m_Background: {fileID: 0} 1611 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1612 | m_Focused: 1613 | m_Background: {fileID: 0} 1614 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1615 | m_OnNormal: 1616 | m_Background: {fileID: 0} 1617 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1618 | m_OnHover: 1619 | m_Background: {fileID: 0} 1620 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1621 | m_OnActive: 1622 | m_Background: {fileID: 0} 1623 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1624 | m_OnFocused: 1625 | m_Background: {fileID: 0} 1626 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1627 | m_Border: 1628 | m_Left: 4 1629 | m_Right: 4 1630 | m_Top: 4 1631 | m_Bottom: 4 1632 | m_Margin: 1633 | m_Left: 4 1634 | m_Right: 4 1635 | m_Top: 4 1636 | m_Bottom: 4 1637 | m_Padding: 1638 | m_Left: 5 1639 | m_Right: 0 1640 | m_Top: 2 1641 | m_Bottom: 0 1642 | m_Overflow: 1643 | m_Left: 0 1644 | m_Right: 0 1645 | m_Top: 0 1646 | m_Bottom: 0 1647 | m_Font: {fileID: 12800000, guid: 3582ef81e9e378e489516a55b77a94ed, type: 3} 1648 | m_FontSize: 13 1649 | m_FontStyle: 0 1650 | m_Alignment: 0 1651 | m_WordWrap: 1 1652 | m_RichText: 1 1653 | m_TextClipping: 1 1654 | m_ImagePosition: 0 1655 | m_ContentOffset: {x: 0, y: 0} 1656 | m_FixedWidth: 0 1657 | m_FixedHeight: 0 1658 | m_StretchWidth: 0 1659 | m_StretchHeight: 0 1660 | - m_Name: head_right 1661 | m_Normal: 1662 | m_Background: {fileID: 0} 1663 | m_TextColor: {r: 0.5921569, g: 0.5921569, b: 0.5921569, a: 1} 1664 | m_Hover: 1665 | m_Background: {fileID: 0} 1666 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1667 | m_Active: 1668 | m_Background: {fileID: 0} 1669 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1670 | m_Focused: 1671 | m_Background: {fileID: 0} 1672 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1673 | m_OnNormal: 1674 | m_Background: {fileID: 0} 1675 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1676 | m_OnHover: 1677 | m_Background: {fileID: 0} 1678 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1679 | m_OnActive: 1680 | m_Background: {fileID: 0} 1681 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1682 | m_OnFocused: 1683 | m_Background: {fileID: 0} 1684 | m_TextColor: {r: 0, g: 0, b: 0, a: 0} 1685 | m_Border: 1686 | m_Left: 4 1687 | m_Right: 4 1688 | m_Top: 4 1689 | m_Bottom: 4 1690 | m_Margin: 1691 | m_Left: 4 1692 | m_Right: 4 1693 | m_Top: 4 1694 | m_Bottom: 4 1695 | m_Padding: 1696 | m_Left: 0 1697 | m_Right: 5 1698 | m_Top: 2 1699 | m_Bottom: 0 1700 | m_Overflow: 1701 | m_Left: 0 1702 | m_Right: 0 1703 | m_Top: 0 1704 | m_Bottom: 0 1705 | m_Font: {fileID: 12800000, guid: 299930e9fd0253841b2c157666da74af, type: 3} 1706 | m_FontSize: 13 1707 | m_FontStyle: 0 1708 | m_Alignment: 2 1709 | m_WordWrap: 1 1710 | m_RichText: 1 1711 | m_TextClipping: 1 1712 | m_ImagePosition: 0 1713 | m_ContentOffset: {x: 0, y: 0} 1714 | m_FixedWidth: 0 1715 | m_FixedHeight: 0 1716 | m_StretchWidth: 0 1717 | m_StretchHeight: 0 1718 | m_Settings: 1719 | m_DoubleClickSelectsWord: 1 1720 | m_TripleClickSelectsLine: 1 1721 | m_CursorColor: {r: 0, g: 0.303, b: 0.572, a: 1} 1722 | m_CursorFlashSpeed: -1 1723 | m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} 1724 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearch.guiskin.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 204ad1a183a21904a8fd300d4aa9347d 3 | timeCreated: 1473948155 4 | licenseType: Free 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearchController.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | namespace QuickSearch { 7 | 8 | public static class QuickSearchController { 9 | private static QuickSearchWindow window_ = null; 10 | 11 | #if UNITY_EDITOR_OSX 12 | [MenuItem("Window/Toggle QuickSearch #`")] 13 | #else 14 | 15 | [MenuItem("Window/Toggle QuickSearch %,")] 16 | #endif 17 | private static void ToggleQuickSearch () { 18 | if (QuickSearchWindow.Active != null) { 19 | QuickSearchWindow.Active.Close(); 20 | return; 21 | } 22 | 23 | window_ = EditorWindow.CreateInstance(); 24 | 25 | window_.OnClose += OnClose; 26 | window_.OnQueryChanged += OnQueryChanged; 27 | window_.OnSelect += OnSelect; 28 | window_.OnExecute += OnExecute; 29 | 30 | var windowSize = QuickSearchWindow.WINDOW_SIZE; 31 | var windowRect = EditorWindowUtility.GetCenterRect(windowSize); 32 | 33 | window_.position = windowRect; 34 | window_.RefreshBlurBackground(); 35 | window_.ShowPopup(); 36 | 37 | window_.Focus(); 38 | window_.FocusOnQueryField(); 39 | 40 | QuickSearchEngine.Instance.NotifyOpen(); 41 | QuickSearchEngine.Instance.OnResultUpdate += Worker_OnResultUpdate; 42 | } 43 | 44 | private static void OnClose () { 45 | QuickSearchEngine.Instance.OnResultUpdate -= Worker_OnResultUpdate; 46 | } 47 | 48 | private static void OnQueryChanged (string query) { 49 | QuickSearchEngine.Instance.RequestFindElements(query); 50 | } 51 | 52 | private static List fetchedResult_ = new List(); 53 | 54 | private static void Worker_OnResultUpdate () { 55 | if (window_ == null) 56 | return; 57 | 58 | QuickSearchEngine.Instance.GetLastResult(fetchedResult_); 59 | 60 | window_.List.Clear(); 61 | window_.List.AddRange(fetchedResult_); 62 | window_.SetSelectedIndex(0); 63 | window_.Repaint(); 64 | } 65 | 66 | private static void OnSelect (ISearchableElement element) { 67 | element.Select(); 68 | 69 | EditorApplication.delayCall += () => { 70 | if (window_ != null) 71 | window_.Focus(); 72 | }; 73 | } 74 | 75 | private static void OnExecute (ISearchableElement element) { 76 | if (window_ != null) 77 | window_.CloseWithoutRestoreSelection(); 78 | 79 | element.Execute(); 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearchController.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e60ec0791eca7e54bb3ffe585bd61503 3 | timeCreated: 1473947247 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearchEngine.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Text.RegularExpressions; 5 | using UnityEditor; 6 | using UnityEngine; 7 | 8 | namespace QuickSearch { 9 | 10 | public struct MatchPair { 11 | public ISearchableElement element; 12 | public float score; 13 | 14 | public MatchPair (ISearchableElement element, float score) { 15 | this.element = element; 16 | this.score = score; 17 | } 18 | } 19 | 20 | [InitializeOnLoad] 21 | public class QuickSearchEngine { 22 | private static QuickSearchEngine instance_ = null; 23 | public static QuickSearchEngine Instance { get { return instance_; } } 24 | 25 | static QuickSearchEngine () { 26 | instance_ = new QuickSearchEngine(); 27 | instance_.Start(); 28 | } 29 | 30 | private const int MAX_RESULT = 20; 31 | 32 | private readonly List indexers_ = new List(); 33 | private EditorThreadLoop worker_ = null; 34 | 35 | public event Action OnResultUpdate = null; 36 | 37 | public void Start () { 38 | indexers_.Add(new AssetIndexer()); 39 | indexers_.Add(new SceneIndexer()); 40 | indexers_.Add(new MenuIndexer()); 41 | 42 | NotifyStartup(); 43 | 44 | worker_ = new EditorThreadLoop(Worker_Loop, 20); 45 | worker_.Start(); 46 | 47 | EditorApplication.update += Editor_OnUpdate; 48 | } 49 | 50 | private readonly List lastResult_ = new List(); 51 | 52 | public void GetLastResult (List outResult) { 53 | lock (lastResult_) { 54 | outResult.Clear(); 55 | outResult.AddRange(lastResult_); 56 | } 57 | } 58 | 59 | private readonly object notifyLock_ = new object(); 60 | private bool notifyResultUpdate_ = false; 61 | 62 | private void Editor_OnUpdate () { 63 | lock (notifyLock_) { 64 | if (!notifyResultUpdate_) 65 | return; 66 | 67 | if (OnResultUpdate != null) 68 | OnResultUpdate(); 69 | 70 | notifyResultUpdate_ = false; 71 | } 72 | } 73 | 74 | private void NotifyStartup () { 75 | for (var i = 0; i < indexers_.Count; ++i) { 76 | indexers_[i].NotifyOnStartup(); 77 | } 78 | } 79 | 80 | public void NotifyOpen () { 81 | for (var i = 0; i < indexers_.Count; ++i) { 82 | indexers_[i].NotifyOnOpen(); 83 | } 84 | } 85 | 86 | public void RequestFindElements (string query) { 87 | lock (queryLock_) { 88 | requestedQuery_ = query; 89 | } 90 | } 91 | 92 | private readonly object queryLock_ = new object(); 93 | 94 | private string requestedQuery_ = null; 95 | 96 | private void Worker_Loop () { 97 | var query = (string)null; 98 | lock (queryLock_) { 99 | if (requestedQuery_ == null) 100 | return; 101 | query = requestedQuery_; 102 | requestedQuery_ = null; 103 | } 104 | 105 | lock (lastResult_) { 106 | var parsedQuery = ParseQuery(query); 107 | var result = FindElements(parsedQuery); 108 | 109 | lastResult_.Clear(); 110 | lastResult_.AddRange(result); 111 | } 112 | 113 | lock (notifyLock_) { 114 | notifyResultUpdate_ = true; 115 | } 116 | } 117 | 118 | private readonly Regex endQueryRule_ = new Regex(@"^\.([^\s]+)", RegexOptions.IgnoreCase); 119 | 120 | private string ParseQuery (string query) { 121 | var match = endQueryRule_.Match(query); 122 | if (!match.Success) 123 | return query; 124 | 125 | var newQuery = endQueryRule_.Replace(query, ""); 126 | newQuery += match.Groups[1].Value; 127 | 128 | return newQuery; 129 | } 130 | 131 | private readonly List tempResult_ = new List(); 132 | private readonly List tempElements_ = new List(); 133 | 134 | private readonly List tempMatchPairs_ = new List(); 135 | 136 | private List FindElements (string query) { 137 | tempResult_.Clear(); 138 | tempMatchPairs_.Clear(); 139 | 140 | var query_lower = query.ToLowerInvariant().Replace(" ", ""); 141 | 142 | for (var i = 0; i < indexers_.Count; ++i) { 143 | var indexer = indexers_[i]; 144 | indexer.NotifyOnQuery(query); 145 | 146 | tempElements_.Clear(); 147 | indexer.RequestElements(tempElements_); 148 | if (tempElements_.Count <= 0) 149 | continue; 150 | 151 | CalculateMatchScore(tempElements_, query_lower, tempMatchPairs_); 152 | } 153 | tempMatchPairs_.Sort((a, b) => b.score.CompareTo(a.score)); 154 | 155 | var resultCount = Mathf.Min(tempMatchPairs_.Count, MAX_RESULT); 156 | for (var i = 0; i < resultCount; ++i) 157 | tempResult_.Add(tempMatchPairs_[i].element); 158 | 159 | return tempResult_; 160 | } 161 | 162 | private void CalculateMatchScore (List elements, string query_lower, List outToAppend) { 163 | for (var i = 0; i < elements.Count; ++i) { 164 | var element = elements[i]; 165 | var score = CalculateMatchScore(element.PrimaryContents.ToLowerInvariant(), query_lower); 166 | 167 | if (element.SecondaryContents != null) { 168 | var secondaryScore = CalculateMatchScore(element.SecondaryContents.ToLowerInvariant(), query_lower) * 0.9f; 169 | score = Mathf.Max(score, secondaryScore); 170 | } 171 | 172 | if (score <= 0.03f) 173 | continue; 174 | 175 | outToAppend.Add(new MatchPair(element, score)); 176 | } 177 | } 178 | 179 | private float CalculateMatchScore (string contents_lower, string query_lower) { 180 | if (query_lower.Length <= 0 || contents_lower.Length <= 0) 181 | return 0; 182 | 183 | var sum = 0f; 184 | var score = 5f; 185 | var cursor = 0; 186 | 187 | for (var i = 0; i < contents_lower.Length; ++i) { 188 | // if there is no more another query character 189 | if (cursor >= query_lower.Length) { 190 | // disadvantage on early break 191 | sum *= 0.95f; 192 | break; 193 | } 194 | 195 | var contentsChr = contents_lower[i]; 196 | var queryChr = query_lower[cursor]; 197 | if (contentsChr == queryChr) { 198 | score *= 2f; 199 | sum += score; 200 | 201 | cursor += 1; 202 | } else { 203 | score *= 0.8f; 204 | score = Mathf.Max(score, 3f); 205 | } 206 | } 207 | // if query has rest characters 208 | if (cursor < query_lower.Length) 209 | return sum * 0.25f; 210 | return sum; 211 | } 212 | } 213 | } -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearchEngine.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0d3ebc9f768b89149be39fbe6bdb2e7c 3 | timeCreated: 1473934156 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearchGUI.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | namespace QuickSearch { 7 | 8 | internal sealed class QuickSearchGUI : ScriptableObject { 9 | public const float WIDTH = 700f; 10 | public const float HEAD_HEIGHT = 20f; 11 | public const float ELEM_HEIGHT = 45F; 12 | 13 | [SerializeField] 14 | private GUISkin guiSkin; 15 | 16 | [SerializeField] 17 | private Texture2D bg; 18 | 19 | [SerializeField] 20 | private Texture2D empty; 21 | 22 | [SerializeField] 23 | private Texture2D searchIcon; 24 | 25 | private Rect lastRect_; 26 | private Rect size_; 27 | 28 | public void StartGUI (Rect size, Texture backgroundTexture) { 29 | lastRect_ = new Rect(); 30 | size_ = size; 31 | 32 | GUI.skin = guiSkin; 33 | 34 | if (backgroundTexture != null) 35 | GUI.DrawTexture(size, backgroundTexture); 36 | else 37 | GUI.DrawTexture(size, bg); 38 | } 39 | 40 | public void DrawHead () { 41 | var titleRect = new Rect(0f, 0f, WIDTH, HEAD_HEIGHT); 42 | var titleStyle = guiSkin.GetStyle("head_title"); 43 | 44 | GUI.Label(titleRect, "QuickSearch", titleStyle); 45 | 46 | var rightStyle = guiSkin.GetStyle("head_right"); 47 | GUI.Label(titleRect, "alt+arrow to move window, tab to peek, enter to select", rightStyle); 48 | 49 | lastRect_ = titleRect; 50 | } 51 | 52 | public void DrawEmpty () { 53 | var emptyWidth = empty.width; 54 | var emptyHeight = empty.height; 55 | 56 | var center = new Rect((size_.width - emptyWidth) * 0.5f, 165f, emptyWidth, emptyHeight); 57 | 58 | GUI.DrawTexture(center, empty); 59 | } 60 | 61 | public string DrawQueryField (string query) { 62 | var rect = new Rect(0f, lastRect_.yMax, WIDTH, ELEM_HEIGHT); 63 | lastRect_ = rect; 64 | 65 | var newQuery = GUI.TextField(rect, query); 66 | var iconRect = new Rect(rect.x + 10f, rect.yMin + 11f, 23f, 23f); 67 | GUI.DrawTexture(iconRect, searchIcon); 68 | 69 | return newQuery; 70 | } 71 | 72 | public void DrawSearchElement (ISearchableElement element, bool selected, 73 | Action onMouseDown, 74 | Action onDrag) { 75 | var bgRect = new Rect(0f, lastRect_.yMax, WIDTH, ELEM_HEIGHT); 76 | var isHover = bgRect.Contains(Event.current.mousePosition); 77 | 78 | var bgStyle = guiSkin.GetStyle("elem_bg_normal"); 79 | if (selected) 80 | bgStyle = guiSkin.GetStyle("elem_bg_selected"); 81 | else if (isHover) 82 | bgStyle = guiSkin.GetStyle("elem_bg_hover"); 83 | 84 | GUI.Box(bgRect, new GUIContent(), bgStyle); 85 | lastRect_ = bgRect; 86 | 87 | if (element.Icon != null) { 88 | var iconRect = new Rect(bgRect.x + 5f, bgRect.y + 9f, 26f, 26f); 89 | GUI.DrawTexture(iconRect, element.Icon, ScaleMode.ScaleToFit); 90 | } 91 | 92 | var titleRect = new Rect(bgRect.x + 35f, bgRect.y + 2f, WIDTH, 25f); 93 | var titleStyle = guiSkin.GetStyle(selected ? "title_selected" : "title_normal"); 94 | GUI.Label(titleRect, element.Title, titleStyle); 95 | 96 | var descRect = new Rect(bgRect.x + 35f, bgRect.y + 23f, WIDTH, 25f); 97 | var descStyle = guiSkin.GetStyle(selected ? "desc_selected" : "desc_normal"); 98 | GUI.Label(descRect, element.Description, descStyle); 99 | 100 | // Process mouse event 101 | if (isHover) { 102 | var evt = Event.current; 103 | if (evt.type == EventType.MouseDown && onMouseDown != null) { 104 | onMouseDown(element); 105 | evt.Use(); 106 | } else if (evt.type == EventType.MouseDrag && onDrag != null) { 107 | onDrag(element); 108 | evt.Use(); 109 | } 110 | } 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearchGUI.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f2575bd07cf1afb4c901044650699b58 3 | timeCreated: 1473954050 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: 8 | - guiSkin: {fileID: 11400000, guid: 204ad1a183a21904a8fd300d4aa9347d, type: 2} 9 | - bg: {fileID: 2800000, guid: c496e8d080370fc4f9f728547ebbf293, type: 3} 10 | - empty: {fileID: 2800000, guid: 6ed859493c70c3b4593920848726a0e3, type: 3} 11 | - searchIcon: {fileID: 2800000, guid: 0aa816038de98744b9ae07a66a46a8d5, type: 3} 12 | executionOrder: 0 13 | icon: {instanceID: 0} 14 | userData: 15 | assetBundleName: 16 | assetBundleVariant: 17 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearchWindow.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | namespace QuickSearch { 8 | 9 | public sealed class QuickSearchWindow : EditorWindow { 10 | public static QuickSearchWindow Active { get; private set; } 11 | 12 | private const int VISIBLE_RESULTS = 7; 13 | private const float WINDOW_MOVE_DELTA = 20f; 14 | 15 | public static readonly Vector2 WINDOW_SIZE = new Vector2(700, (VISIBLE_RESULTS + 1) * QuickSearchGUI.ELEM_HEIGHT + QuickSearchGUI.HEAD_HEIGHT); 16 | 17 | public event Action OnClose = null; 18 | 19 | public event Action OnQueryChanged = null; 20 | 21 | public event Action OnSelect = null; 22 | 23 | public event Action OnExecute = null; 24 | 25 | private readonly List list_ = new List(); 26 | public List List { get { return list_; } } 27 | 28 | private int selectedIndex_ = 0; 29 | public int SelectedIndex { get { return selectedIndex_; } } 30 | 31 | private QuickSearchGUI gui_ = null; 32 | private Texture backgroundTexture_ = null; 33 | 34 | private bool tryFocusQueryField_ = false; 35 | private bool trySelectAllQueryField_ = false; 36 | private bool dontRestoreSelection_ = false; 37 | 38 | private static string query_ = ""; 39 | private string oldQuery_ = null; 40 | private bool isDragging_ = false; 41 | 42 | private UnityEngine.Object[] oldSelections_ = null; 43 | 44 | private void OnEnable () { 45 | gui_ = ScriptableObject.CreateInstance(); 46 | gui_.hideFlags = HideFlags.HideAndDontSave; 47 | 48 | minSize = WINDOW_SIZE; 49 | maxSize = WINDOW_SIZE; 50 | 51 | oldSelections_ = Selection.objects; 52 | 53 | Active = this; 54 | } 55 | 56 | private void OnDisable () { 57 | if (Active == this) 58 | Active = null; 59 | 60 | DestroyBackgroundTexture(); 61 | 62 | if (!dontRestoreSelection_) 63 | Selection.objects = oldSelections_; 64 | 65 | ScriptableObject.DestroyImmediate(gui_); 66 | 67 | if (OnClose != null) 68 | OnClose(); 69 | } 70 | 71 | public void RefreshBlurBackground () { 72 | DestroyBackgroundTexture(); 73 | 74 | var windowRect = this.position; 75 | var position = windowRect.position; 76 | var width = (int)windowRect.width; 77 | var height = (int)windowRect.height; 78 | 79 | if (width <= 0 || height <= 0) 80 | return; 81 | 82 | var pixels = UnityEditorInternal.InternalEditorUtility.ReadScreenPixel(position, width, height); 83 | var baseTex = new Texture2D(width, height, TextureFormat.RGBA32, false); 84 | baseTex.hideFlags = HideFlags.DontSave; 85 | baseTex.SetPixels(pixels); 86 | baseTex.Apply(); 87 | 88 | var blurOptions = new BlurOptions(); 89 | var blurTexture = BlurUtility.BlurTexture(baseTex, blurOptions); 90 | 91 | Texture2D.DestroyImmediate(baseTex); 92 | backgroundTexture_ = blurTexture; 93 | } 94 | 95 | private void DestroyBackgroundTexture () { 96 | if (backgroundTexture_ != null) 97 | Texture.DestroyImmediate(backgroundTexture_); 98 | backgroundTexture_ = null; 99 | } 100 | 101 | private void Update () { 102 | WatchDragEnd(); 103 | 104 | if (EditorWindow.focusedWindow != this && !isDragging_) 105 | Close(); 106 | } 107 | 108 | private void OnGUI () { 109 | wantsMouseMove = true; 110 | 111 | ProcessKeyboardEvents(); 112 | ProcessWheelEvents(); 113 | DrawGUI(); 114 | ProcessTryFocusQueryField(); 115 | 116 | if (Event.current.type == EventType.MouseMove) 117 | Repaint(); 118 | } 119 | 120 | private void DrawGUI () { 121 | gui_.StartGUI(new Rect(0, 0, WINDOW_SIZE.x, WINDOW_SIZE.y), backgroundTexture_); 122 | gui_.DrawHead(); 123 | 124 | GUI.SetNextControlName("queryField"); 125 | query_ = gui_.DrawQueryField(query_); 126 | 127 | ProcessTrySelectAll(); 128 | 129 | if (oldQuery_ != query_) { 130 | if (OnQueryChanged != null) 131 | OnQueryChanged(query_); 132 | oldQuery_ = query_; 133 | } 134 | 135 | if (List.Count > 0) { 136 | var begin = 0; 137 | var end = List.Count; 138 | 139 | if (selectedIndex_ >= VISIBLE_RESULTS) { 140 | begin = (int)(selectedIndex_ / VISIBLE_RESULTS) * VISIBLE_RESULTS; 141 | end = begin + VISIBLE_RESULTS; 142 | } 143 | 144 | end = Mathf.Min(List.Count, end); 145 | 146 | for (var i = begin; i < end; ++i) { 147 | var element = list_[i]; 148 | var isSelected = (selectedIndex_ == i); 149 | 150 | gui_.DrawSearchElement(element, isSelected, OnElementClick, OnElementDrag); 151 | } 152 | } else { 153 | // no results 154 | gui_.DrawEmpty(); 155 | } 156 | } 157 | 158 | private void OnElementClick (ISearchableElement elem) { 159 | var idx = List.IndexOf(elem); 160 | if (idx < 0) 161 | return; 162 | 163 | SetSelectedIndex(idx); 164 | Repaint(); 165 | } 166 | 167 | private void OnElementDrag (ISearchableElement elem) { 168 | if (!elem.SupportDrag || elem.DragObject == null) 169 | return; 170 | 171 | DragAndDrop.PrepareStartDrag(); 172 | DragAndDrop.objectReferences = new[] { elem.DragObject }; 173 | DragAndDrop.StartDrag("Dragging Object"); 174 | 175 | isDragging_ = true; 176 | } 177 | 178 | private void WatchDragEnd () { 179 | if (!isDragging_) 180 | return; 181 | if (DragAndDrop.objectReferences.Length > 0) 182 | return; 183 | 184 | // End of drag 185 | isDragging_ = false; 186 | Focus(); 187 | } 188 | 189 | private void ProcessWheelEvents () { 190 | var evt = Event.current; 191 | if (evt.type != EventType.ScrollWheel) 192 | return; 193 | 194 | var delta = evt.delta; 195 | if (delta.y > 0) 196 | SetSelectedIndex(SelectedIndex + 1); 197 | else 198 | SetSelectedIndex(SelectedIndex - 1); 199 | evt.Use(); 200 | } 201 | 202 | private void ProcessKeyboardEvents () { 203 | var evt = Event.current; 204 | var keyCode = evt.keyCode; 205 | 206 | // Ctrl + A Hook 207 | if (evt.control && keyCode == KeyCode.A) { 208 | trySelectAllQueryField_ = true; 209 | evt.Use(); 210 | return; 211 | } 212 | 213 | // KeyDown 214 | if (evt.type != EventType.KeyDown) 215 | return; 216 | 217 | var consumeEvent = true; 218 | if (evt.alt && keyCode == KeyCode.LeftArrow) 219 | MoveWindow(new Vector2(-WINDOW_MOVE_DELTA, 0)); 220 | else if (evt.alt && keyCode == KeyCode.RightArrow) 221 | MoveWindow(new Vector2(WINDOW_MOVE_DELTA, 0)); 222 | else if (evt.alt && keyCode == KeyCode.UpArrow) 223 | MoveWindow(new Vector2(0, -WINDOW_MOVE_DELTA)); 224 | else if (evt.alt && keyCode == KeyCode.DownArrow) 225 | MoveWindow(new Vector2(0, WINDOW_MOVE_DELTA)); 226 | else if (keyCode == KeyCode.DownArrow) 227 | SetSelectedIndex(SelectedIndex + 1); 228 | else if (keyCode == KeyCode.UpArrow) 229 | SetSelectedIndex(SelectedIndex - 1); 230 | else if (keyCode == KeyCode.Tab) 231 | EmitSelect(); 232 | else if (keyCode == KeyCode.Return) 233 | EmitExecute(); 234 | else if (keyCode == KeyCode.Escape) 235 | Escape(); 236 | else 237 | consumeEvent = false; 238 | 239 | if (consumeEvent) 240 | evt.Use(); 241 | } 242 | 243 | private void ProcessTryFocusQueryField () { 244 | if (!tryFocusQueryField_) 245 | return; 246 | 247 | EditorGUI.FocusTextInControl("queryField"); 248 | tryFocusQueryField_ = false; 249 | } 250 | 251 | private void ProcessTrySelectAll () { 252 | if (!trySelectAllQueryField_) 253 | return; 254 | 255 | var textEditor = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl); 256 | if (textEditor != null) { 257 | textEditor.SelectAll(); 258 | } 259 | trySelectAllQueryField_ = false; 260 | } 261 | 262 | public void MoveWindow (Vector2 delta) { 263 | var rect = position; 264 | var pos = rect.position; 265 | pos += delta; 266 | 267 | rect.position = pos; 268 | position = rect; 269 | 270 | DestroyBackgroundTexture(); 271 | } 272 | 273 | public void Escape () { 274 | if (query_.Length > 0) { 275 | query_ = ""; 276 | return; 277 | } 278 | 279 | Close(); 280 | } 281 | 282 | public void CloseWithoutRestoreSelection () { 283 | dontRestoreSelection_ = true; 284 | Close(); 285 | } 286 | 287 | private void EmitSelect () { 288 | if (selectedIndex_ >= List.Count) 289 | return; 290 | if (List.Count <= 0) 291 | return; 292 | 293 | var selectedElement = List[selectedIndex_]; 294 | if (OnSelect != null) 295 | OnSelect(selectedElement); 296 | } 297 | 298 | private void EmitExecute () { 299 | if (selectedIndex_ >= List.Count) 300 | return; 301 | if (List.Count <= 0) 302 | return; 303 | 304 | var selectedElement = List[selectedIndex_]; 305 | if (OnExecute != null) 306 | OnExecute(selectedElement); 307 | } 308 | 309 | public void SetSelectedIndex (int idx) { 310 | selectedIndex_ = Mathf.Clamp(idx, 0, List.Count - 1); 311 | } 312 | 313 | public void FocusOnQueryField () { 314 | tryFocusQueryField_ = true; 315 | } 316 | } 317 | } 318 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/QuickSearchWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e0bbbc4af2e058043afcc115bb718ae2 3 | timeCreated: 1473931685 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 613edb5f5cd168b4ea41d04000e0819e 3 | folderAsset: yes 4 | timeCreated: 1473951151 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/elem_bg_hover.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/Assets/Plugins/QuickSearch/Editor/Textures/elem_bg_hover.psd -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/elem_bg_hover.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8171cde582d397f40952a0a72a199ac5 3 | timeCreated: 1474004296 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 2 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | linearTexture: 1 12 | correctGamma: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapFadeDistanceStart: 1 16 | mipMapFadeDistanceEnd: 3 17 | bumpmap: 18 | convertToNormalMap: 0 19 | externalNormalMap: 0 20 | heightScale: 0.25 21 | normalMapFilter: 0 22 | isReadable: 0 23 | grayScaleToAlpha: 0 24 | generateCubemap: 0 25 | cubemapConvolution: 0 26 | cubemapConvolutionSteps: 7 27 | cubemapConvolutionExponent: 1.5 28 | seamlessCubemap: 0 29 | textureFormat: -3 30 | maxTextureSize: 32 31 | textureSettings: 32 | filterMode: 1 33 | aniso: 1 34 | mipBias: -1 35 | wrapMode: 1 36 | nPOTScale: 0 37 | lightmap: 0 38 | rGBM: 0 39 | compressionQuality: 50 40 | allowsAlphaSplitting: 0 41 | spriteMode: 0 42 | spriteExtrude: 1 43 | spriteMeshType: 1 44 | alignment: 0 45 | spritePivot: {x: 0.5, y: 0.5} 46 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 47 | spritePixelsToUnits: 100 48 | alphaIsTransparency: 1 49 | textureType: 2 50 | buildTargetSettings: [] 51 | spriteSheet: 52 | sprites: [] 53 | outline: [] 54 | spritePackingTag: 55 | userData: 56 | assetBundleName: 57 | assetBundleVariant: 58 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/elem_bg_selected.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/Assets/Plugins/QuickSearch/Editor/Textures/elem_bg_selected.psd -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/elem_bg_selected.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0bdad43329cd7534ab1bf8ed4c819e31 3 | timeCreated: 1473951848 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 2 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | linearTexture: 1 12 | correctGamma: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapFadeDistanceStart: 1 16 | mipMapFadeDistanceEnd: 3 17 | bumpmap: 18 | convertToNormalMap: 0 19 | externalNormalMap: 0 20 | heightScale: 0.25 21 | normalMapFilter: 0 22 | isReadable: 0 23 | grayScaleToAlpha: 0 24 | generateCubemap: 0 25 | cubemapConvolution: 0 26 | cubemapConvolutionSteps: 7 27 | cubemapConvolutionExponent: 1.5 28 | seamlessCubemap: 0 29 | textureFormat: -3 30 | maxTextureSize: 32 31 | textureSettings: 32 | filterMode: 1 33 | aniso: 1 34 | mipBias: -1 35 | wrapMode: 1 36 | nPOTScale: 0 37 | lightmap: 0 38 | rGBM: 0 39 | compressionQuality: 50 40 | allowsAlphaSplitting: 0 41 | spriteMode: 0 42 | spriteExtrude: 1 43 | spriteMeshType: 1 44 | alignment: 0 45 | spritePivot: {x: 0.5, y: 0.5} 46 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 47 | spritePixelsToUnits: 100 48 | alphaIsTransparency: 1 49 | textureType: 2 50 | buildTargetSettings: [] 51 | spriteSheet: 52 | sprites: [] 53 | outline: [] 54 | spritePackingTag: 55 | userData: 56 | assetBundleName: 57 | assetBundleVariant: 58 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/empty.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/Assets/Plugins/QuickSearch/Editor/Textures/empty.psd -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/empty.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6ed859493c70c3b4593920848726a0e3 3 | timeCreated: 1473953920 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 2 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | linearTexture: 1 12 | correctGamma: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapFadeDistanceStart: 1 16 | mipMapFadeDistanceEnd: 3 17 | bumpmap: 18 | convertToNormalMap: 0 19 | externalNormalMap: 0 20 | heightScale: 0.25 21 | normalMapFilter: 0 22 | isReadable: 0 23 | grayScaleToAlpha: 0 24 | generateCubemap: 0 25 | cubemapConvolution: 0 26 | cubemapConvolutionSteps: 7 27 | cubemapConvolutionExponent: 1.5 28 | seamlessCubemap: 0 29 | textureFormat: -3 30 | maxTextureSize: 128 31 | textureSettings: 32 | filterMode: -1 33 | aniso: 1 34 | mipBias: -1 35 | wrapMode: 1 36 | nPOTScale: 0 37 | lightmap: 0 38 | rGBM: 0 39 | compressionQuality: 50 40 | allowsAlphaSplitting: 0 41 | spriteMode: 0 42 | spriteExtrude: 1 43 | spriteMeshType: 1 44 | alignment: 0 45 | spritePivot: {x: 0.5, y: 0.5} 46 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 47 | spritePixelsToUnits: 100 48 | alphaIsTransparency: 1 49 | textureType: 2 50 | buildTargetSettings: [] 51 | spriteSheet: 52 | sprites: [] 53 | outline: [] 54 | spritePackingTag: 55 | userData: 56 | assetBundleName: 57 | assetBundleVariant: 58 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/search_icon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/Assets/Plugins/QuickSearch/Editor/Textures/search_icon.psd -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/search_icon.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0aa816038de98744b9ae07a66a46a8d5 3 | timeCreated: 1473952163 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 2 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | linearTexture: 1 12 | correctGamma: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapFadeDistanceStart: 1 16 | mipMapFadeDistanceEnd: 3 17 | bumpmap: 18 | convertToNormalMap: 0 19 | externalNormalMap: 0 20 | heightScale: 0.25 21 | normalMapFilter: 0 22 | isReadable: 0 23 | grayScaleToAlpha: 0 24 | generateCubemap: 0 25 | cubemapConvolution: 0 26 | cubemapConvolutionSteps: 7 27 | cubemapConvolutionExponent: 1.5 28 | seamlessCubemap: 0 29 | textureFormat: -3 30 | maxTextureSize: 32 31 | textureSettings: 32 | filterMode: 1 33 | aniso: 1 34 | mipBias: -1 35 | wrapMode: 1 36 | nPOTScale: 0 37 | lightmap: 0 38 | rGBM: 0 39 | compressionQuality: 50 40 | allowsAlphaSplitting: 0 41 | spriteMode: 0 42 | spriteExtrude: 1 43 | spriteMeshType: 1 44 | alignment: 0 45 | spritePivot: {x: 0.5, y: 0.5} 46 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 47 | spritePixelsToUnits: 100 48 | alphaIsTransparency: 1 49 | textureType: 2 50 | buildTargetSettings: [] 51 | spriteSheet: 52 | sprites: [] 53 | outline: [] 54 | spritePackingTag: 55 | userData: 56 | assetBundleName: 57 | assetBundleVariant: 58 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/textfield.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/Assets/Plugins/QuickSearch/Editor/Textures/textfield.psd -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/textfield.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5c86540b75b5a8e43a5bbf784d037cf5 3 | timeCreated: 1473951227 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 2 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | linearTexture: 1 12 | correctGamma: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapFadeDistanceStart: 1 16 | mipMapFadeDistanceEnd: 3 17 | bumpmap: 18 | convertToNormalMap: 0 19 | externalNormalMap: 0 20 | heightScale: 0.25 21 | normalMapFilter: 0 22 | isReadable: 0 23 | grayScaleToAlpha: 0 24 | generateCubemap: 0 25 | cubemapConvolution: 0 26 | cubemapConvolutionSteps: 7 27 | cubemapConvolutionExponent: 1.5 28 | seamlessCubemap: 0 29 | textureFormat: -3 30 | maxTextureSize: 32 31 | textureSettings: 32 | filterMode: 1 33 | aniso: 1 34 | mipBias: -1 35 | wrapMode: 1 36 | nPOTScale: 0 37 | lightmap: 0 38 | rGBM: 0 39 | compressionQuality: 50 40 | allowsAlphaSplitting: 0 41 | spriteMode: 0 42 | spriteExtrude: 1 43 | spriteMeshType: 1 44 | alignment: 0 45 | spritePivot: {x: 0.5, y: 0.5} 46 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 47 | spritePixelsToUnits: 100 48 | alphaIsTransparency: 1 49 | textureType: 2 50 | buildTargetSettings: [] 51 | spriteSheet: 52 | sprites: [] 53 | outline: [] 54 | spritePackingTag: 55 | userData: 56 | assetBundleName: 57 | assetBundleVariant: 58 | -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/white.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/Assets/Plugins/QuickSearch/Editor/Textures/white.psd -------------------------------------------------------------------------------- /Assets/Plugins/QuickSearch/Editor/Textures/white.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c496e8d080370fc4f9f728547ebbf293 3 | timeCreated: 1473951848 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 2 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | linearTexture: 1 12 | correctGamma: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapFadeDistanceStart: 1 16 | mipMapFadeDistanceEnd: 3 17 | bumpmap: 18 | convertToNormalMap: 0 19 | externalNormalMap: 0 20 | heightScale: 0.25 21 | normalMapFilter: 0 22 | isReadable: 0 23 | grayScaleToAlpha: 0 24 | generateCubemap: 0 25 | cubemapConvolution: 0 26 | cubemapConvolutionSteps: 7 27 | cubemapConvolutionExponent: 1.5 28 | seamlessCubemap: 0 29 | textureFormat: -3 30 | maxTextureSize: 32 31 | textureSettings: 32 | filterMode: 1 33 | aniso: 1 34 | mipBias: -1 35 | wrapMode: 1 36 | nPOTScale: 0 37 | lightmap: 0 38 | rGBM: 0 39 | compressionQuality: 50 40 | allowsAlphaSplitting: 0 41 | spriteMode: 0 42 | spriteExtrude: 1 43 | spriteMeshType: 1 44 | alignment: 0 45 | spritePivot: {x: 0.5, y: 0.5} 46 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 47 | spritePixelsToUnits: 100 48 | alphaIsTransparency: 1 49 | textureType: 2 50 | buildTargetSettings: [] 51 | spriteSheet: 52 | sprites: [] 53 | outline: [] 54 | spritePackingTag: 55 | userData: 56 | assetBundleName: 57 | assetBundleVariant: 58 | -------------------------------------------------------------------------------- /Assets/TestScene.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9cd10fc468167004ea3446786ba49712 3 | folderAsset: yes 4 | timeCreated: 1473931647 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/TestScene/TestScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 8 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 3 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | --- !u!157 &3 43 | LightmapSettings: 44 | m_ObjectHideFlags: 0 45 | serializedVersion: 9 46 | m_GIWorkflowMode: 1 47 | m_GISettings: 48 | serializedVersion: 2 49 | m_BounceScale: 1 50 | m_IndirectOutputScale: 1 51 | m_AlbedoBoost: 1 52 | m_TemporalCoherenceThreshold: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 0 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 8 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_TextureWidth: 1024 61 | m_TextureHeight: 1024 62 | m_AO: 0 63 | m_AOMaxDistance: 1 64 | m_CompAOExponent: 0 65 | m_CompAOExponentDirect: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 1024 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 1 75 | m_BakeBackend: 0 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVRFiltering: 0 81 | m_PVRFilteringMode: 1 82 | m_PVRCulling: 1 83 | m_PVRFilteringGaussRadiusDirect: 1 84 | m_PVRFilteringGaussRadiusIndirect: 5 85 | m_PVRFilteringGaussRadiusAO: 2 86 | m_PVRFilteringAtrousColorSigma: 1 87 | m_PVRFilteringAtrousNormalSigma: 1 88 | m_PVRFilteringAtrousPositionSigma: 1 89 | m_LightingDataAsset: {fileID: 0} 90 | m_ShadowMaskMode: 2 91 | --- !u!196 &4 92 | NavMeshSettings: 93 | serializedVersion: 2 94 | m_ObjectHideFlags: 0 95 | m_BuildSettings: 96 | serializedVersion: 2 97 | agentTypeID: 0 98 | agentRadius: 0.5 99 | agentHeight: 2 100 | agentSlope: 45 101 | agentClimb: 0.4 102 | ledgeDropHeight: 0 103 | maxJumpAcrossDistance: 0 104 | minRegionArea: 2 105 | manualCellSize: 0 106 | cellSize: 0.16666667 107 | manualTileSize: 0 108 | tileSize: 256 109 | accuratePlacement: 0 110 | m_NavMeshData: {fileID: 0} 111 | --- !u!1 &233184378 112 | GameObject: 113 | m_ObjectHideFlags: 0 114 | m_PrefabParentObject: {fileID: 0} 115 | m_PrefabInternal: {fileID: 0} 116 | serializedVersion: 5 117 | m_Component: 118 | - component: {fileID: 233184379} 119 | m_Layer: 0 120 | m_Name: OrMe 121 | m_TagString: Untagged 122 | m_Icon: {fileID: 0} 123 | m_NavMeshLayer: 0 124 | m_StaticEditorFlags: 0 125 | m_IsActive: 1 126 | --- !u!4 &233184379 127 | Transform: 128 | m_ObjectHideFlags: 0 129 | m_PrefabParentObject: {fileID: 0} 130 | m_PrefabInternal: {fileID: 0} 131 | m_GameObject: {fileID: 233184378} 132 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 133 | m_LocalPosition: {x: 0, y: 0, z: 0} 134 | m_LocalScale: {x: 1, y: 1, z: 1} 135 | m_Children: [] 136 | m_Father: {fileID: 0} 137 | m_RootOrder: 2 138 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 139 | --- !u!1 &709675055 140 | GameObject: 141 | m_ObjectHideFlags: 0 142 | m_PrefabParentObject: {fileID: 0} 143 | m_PrefabInternal: {fileID: 0} 144 | serializedVersion: 5 145 | m_Component: 146 | - component: {fileID: 709675056} 147 | m_Layer: 0 148 | m_Name: SearchForMe 149 | m_TagString: Untagged 150 | m_Icon: {fileID: 0} 151 | m_NavMeshLayer: 0 152 | m_StaticEditorFlags: 0 153 | m_IsActive: 1 154 | --- !u!4 &709675056 155 | Transform: 156 | m_ObjectHideFlags: 0 157 | m_PrefabParentObject: {fileID: 0} 158 | m_PrefabInternal: {fileID: 0} 159 | m_GameObject: {fileID: 709675055} 160 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 161 | m_LocalPosition: {x: 0, y: 0, z: 0} 162 | m_LocalScale: {x: 1, y: 1, z: 1} 163 | m_Children: [] 164 | m_Father: {fileID: 0} 165 | m_RootOrder: 1 166 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 167 | --- !u!1 &1284795670 168 | GameObject: 169 | m_ObjectHideFlags: 0 170 | m_PrefabParentObject: {fileID: 0} 171 | m_PrefabInternal: {fileID: 0} 172 | serializedVersion: 5 173 | m_Component: 174 | - component: {fileID: 1284795675} 175 | - component: {fileID: 1284795674} 176 | - component: {fileID: 1284795673} 177 | - component: {fileID: 1284795672} 178 | - component: {fileID: 1284795671} 179 | m_Layer: 0 180 | m_Name: Main Camera 181 | m_TagString: MainCamera 182 | m_Icon: {fileID: 0} 183 | m_NavMeshLayer: 0 184 | m_StaticEditorFlags: 0 185 | m_IsActive: 1 186 | --- !u!81 &1284795671 187 | AudioListener: 188 | m_ObjectHideFlags: 0 189 | m_PrefabParentObject: {fileID: 0} 190 | m_PrefabInternal: {fileID: 0} 191 | m_GameObject: {fileID: 1284795670} 192 | m_Enabled: 1 193 | --- !u!124 &1284795672 194 | Behaviour: 195 | m_ObjectHideFlags: 0 196 | m_PrefabParentObject: {fileID: 0} 197 | m_PrefabInternal: {fileID: 0} 198 | m_GameObject: {fileID: 1284795670} 199 | m_Enabled: 1 200 | --- !u!92 &1284795673 201 | Behaviour: 202 | m_ObjectHideFlags: 0 203 | m_PrefabParentObject: {fileID: 0} 204 | m_PrefabInternal: {fileID: 0} 205 | m_GameObject: {fileID: 1284795670} 206 | m_Enabled: 1 207 | --- !u!20 &1284795674 208 | Camera: 209 | m_ObjectHideFlags: 0 210 | m_PrefabParentObject: {fileID: 0} 211 | m_PrefabInternal: {fileID: 0} 212 | m_GameObject: {fileID: 1284795670} 213 | m_Enabled: 1 214 | serializedVersion: 2 215 | m_ClearFlags: 1 216 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} 217 | m_NormalizedViewPortRect: 218 | serializedVersion: 2 219 | x: 0 220 | y: 0 221 | width: 1 222 | height: 1 223 | near clip plane: 0.3 224 | far clip plane: 1000 225 | field of view: 60 226 | orthographic: 1 227 | orthographic size: 5 228 | m_Depth: -1 229 | m_CullingMask: 230 | serializedVersion: 2 231 | m_Bits: 4294967295 232 | m_RenderingPath: -1 233 | m_TargetTexture: {fileID: 0} 234 | m_TargetDisplay: 0 235 | m_TargetEye: 3 236 | m_HDR: 0 237 | m_AllowMSAA: 1 238 | m_ForceIntoRT: 0 239 | m_OcclusionCulling: 1 240 | m_StereoConvergence: 10 241 | m_StereoSeparation: 0.022 242 | m_StereoMirrorMode: 0 243 | --- !u!4 &1284795675 244 | Transform: 245 | m_ObjectHideFlags: 0 246 | m_PrefabParentObject: {fileID: 0} 247 | m_PrefabInternal: {fileID: 0} 248 | m_GameObject: {fileID: 1284795670} 249 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 250 | m_LocalPosition: {x: 0, y: 0, z: -10} 251 | m_LocalScale: {x: 1, y: 1, z: 1} 252 | m_Children: [] 253 | m_Father: {fileID: 0} 254 | m_RootOrder: 0 255 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 256 | -------------------------------------------------------------------------------- /Assets/TestScene/TestScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1814093bf11ae6f47805f56a5705d1e8 3 | timeCreated: 1473931656 4 | licenseType: Free 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Heejin Lee 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # QuickSearch 2 | 3 | A Command Palette for Unity, built with :heart: 4 | 5 |

6 | 7 |

8 | 9 | ## Features 10 | - Search Assets 11 | - Search GameObjects on Active Scenes 12 | - Execute Menu 13 | - Support Asset Dragging 14 | 15 | ## Requirements 16 | Unity >= 5.2.2 17 | 18 | ## Installation 19 | #### - with [unity-packman](https://github.com/appetizermonster/unity-packman) 20 | 21 | ```bash 22 | unity-packman install appetizermonster/Unity3D-QuickSearch 23 | ``` 24 | 25 | #### - or Asset Package 26 | Download [latest package](https://github.com/appetizermonster/Unity3D-QuickSearch/raw/master/packages/latest.unitypackage) 27 | 28 | ## Usage 29 | Press Ctrl + , on Windows, Shift + ` on macOS 30 | 31 | ## Credits 32 | - Blur Background 33 | 34 | - Builtin Asset Icons 35 | 36 | - Center EditorWindow 37 | 38 | 39 | ## License 40 | MIT 41 | -------------------------------------------------------------------------------- /docs/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/docs/demo.gif -------------------------------------------------------------------------------- /packages/latest.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizermonster/Unity3D-QuickSearch/1fa0129931656b5c18e78f57f19143463654a93f/packages/latest.unitypackage -------------------------------------------------------------------------------- /packman.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Unity3D-QuickSearch", 3 | "export": "Assets/Plugins/QuickSearch" 4 | } --------------------------------------------------------------------------------