├── .gitignore ├── Assets ├── HierarcyCustomiser.meta ├── HierarcyCustomiser │ ├── Editor.meta │ └── Editor │ │ ├── HierarchyCustomiserAsset.cs │ │ ├── HierarchyCustomiserAsset.cs.meta │ │ ├── HierarchyCustomiserEd.cs │ │ ├── HierarchyCustomiserEd.cs.meta │ │ ├── HierarchyCustomiserEdSettings.asset │ │ ├── HierarchyCustomiserEdSettings.asset.meta │ │ ├── HierarchyCustomiserEdWindow.cs │ │ └── HierarchyCustomiserEdWindow.cs.meta ├── Sample.meta └── Sample │ ├── SampleIcons.meta │ ├── SampleIcons │ ├── ico_blue.png │ ├── ico_blue.png.meta │ ├── ico_green.png │ ├── ico_green.png.meta │ ├── ico_red.png │ └── ico_red.png.meta │ ├── sample_ccene.unity │ └── sample_ccene.unity.meta ├── README.md └── UNLICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Tt]emp/ 3 | /[Oo]bj/ 4 | /[Bb]uild/ 5 | /[Bb]uilds/ 6 | /Assets/AssetStoreTools* 7 | /ProjectSettings/ 8 | /_build/ 9 | /_work/ 10 | 11 | # Visual Studio 2015 cache directory 12 | /.vs/ 13 | 14 | # Autogenerated VS/MD/Consulo solution and project files 15 | ExportedObj/ 16 | .consulo/ 17 | *.csproj 18 | *.unityproj 19 | *.sln 20 | *.suo 21 | *.tmp 22 | *.user 23 | *.userprefs 24 | *.pidb 25 | *.booproj 26 | *.svd 27 | *.pdb 28 | 29 | # Unity3D generated meta files 30 | *.pidb.meta 31 | 32 | # Unity3D Generated File On Crash Reports 33 | sysinfo.txt 34 | 35 | # Builds 36 | *.apk 37 | *.unitypackage 38 | -------------------------------------------------------------------------------- /Assets/HierarcyCustomiser.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9b4c2c578c083154594706bc97dcf11a 3 | folderAsset: yes 4 | timeCreated: 1504078821 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/HierarcyCustomiser/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 89c2e62ae5438e945816ce47b19af334 3 | folderAsset: yes 4 | timeCreated: 1504078826 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/HierarcyCustomiser/Editor/HierarchyCustomiserAsset.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | 4 | 5 | namespace HierarchyCustomiser 6 | { 7 | public class HierarchyCustomiserAsset : ScriptableObject, ISerializationCallbackReceiver 8 | { 9 | [HideInInspector] public HierarchyCustomiserOption[] layerOps; 10 | [HideInInspector] public List tagOps; 11 | public Dictionary TagCache = new Dictionary(); 12 | 13 | public void InitNew() 14 | { 15 | tagOps = new List(); 16 | layerOps = new HierarchyCustomiserOption[32]; 17 | for (int i = 0; i < layerOps.Length; i++) layerOps[i] = new HierarchyCustomiserOption(); 18 | } 19 | 20 | public void RefreshTagCache() 21 | { 22 | TagCache.Clear(); 23 | foreach (HierarchyCustomiserOption op in tagOps) 24 | { 25 | if (!string.IsNullOrEmpty(op.tag) && !TagCache.ContainsKey(op.tag)) TagCache.Add(op.tag, op); 26 | } 27 | } 28 | 29 | void ISerializationCallbackReceiver.OnAfterDeserialize() 30 | { 31 | RefreshTagCache(); 32 | } 33 | 34 | void ISerializationCallbackReceiver.OnBeforeSerialize() 35 | { 36 | RefreshTagCache(); 37 | } 38 | 39 | } 40 | 41 | // ================================================================================================================ 42 | 43 | [System.Serializable] 44 | public class HierarchyCustomiserOption 45 | { 46 | public string tag; 47 | public Texture2D icon; 48 | public bool iconLeft; 49 | public int iconOffs; 50 | public Color textColor; 51 | public Color backColor; 52 | } 53 | } -------------------------------------------------------------------------------- /Assets/HierarcyCustomiser/Editor/HierarchyCustomiserAsset.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9c541e7e5622a1241b7f1991c1cb20ab 3 | timeCreated: 1504079103 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/HierarcyCustomiser/Editor/HierarchyCustomiserEd.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using UnityEngine; 3 | using UnityEditor; 4 | using UnityEditor.IMGUI.Controls; 5 | 6 | 7 | namespace HierarchyCustomiser 8 | { 9 | [InitializeOnLoad] 10 | public class HierarchyCustomiserEd 11 | { 12 | public static class Styles 13 | { 14 | public static GUIStyle Label1; 15 | public static GUIStyle Label2; 16 | 17 | static Styles() 18 | { 19 | Label1 = new GUIStyle(TreeView.DefaultStyles.foldoutLabel) { richText = false }; 20 | Label2 = new GUIStyle(Label1) { normal = { background = EditorGUIUtility.whiteTexture } }; 21 | } 22 | } 23 | 24 | private static GUIContent GC_Temp = new GUIContent(); 25 | 26 | private static HierarchyCustomiserAsset _settings = null; 27 | public static HierarchyCustomiserAsset Settings { get { return _settings ?? (_settings = LoadSettings()); } } 28 | 29 | // ------------------------------------------------------------------------------------------------------------ 30 | 31 | static HierarchyCustomiserEd() 32 | { 33 | EditorApplication.hierarchyWindowItemOnGUI += HierarchyOnGUI; 34 | } 35 | 36 | private static void HierarchyOnGUI(int instanceID, Rect rect) 37 | { 38 | if (Event.current.type != EventType.Repaint) return; 39 | GameObject go = EditorUtility.InstanceIDToObject(instanceID) as GameObject; 40 | if (go == null) return; 41 | 42 | // get options 43 | HierarchyCustomiserOption opt1 = Settings.layerOps[go.layer]; 44 | HierarchyCustomiserOption opt2 = null; Settings.TagCache.TryGetValue(go.tag, out opt2); 45 | 46 | // draw text 47 | if (!Selection.instanceIDs.Contains(instanceID)) 48 | { 49 | Color textCol = (opt2 != null && opt2.textColor.a > 0f ? opt2.textColor : opt1.textColor); 50 | Color backColor = (opt2 != null && opt2.backColor.a > 0f ? opt2.backColor : opt1.backColor); 51 | 52 | if (backColor.a > 0f) 53 | { 54 | GUI.backgroundColor = backColor; 55 | Styles.Label2.normal.textColor = (textCol.a > 0f ? textCol : TreeView.DefaultStyles.foldoutLabel.normal.textColor); 56 | Styles.Label2.padding.left = (int)rect.x; 57 | Rect r = rect; r.width += r.width; r.x = 0; 58 | Styles.Label2.Draw(r, TempGUIContent(go.name), false, false, false, false); 59 | GUI.backgroundColor = Color.white; 60 | } 61 | 62 | else if (textCol.a > 0f) 63 | { 64 | Styles.Label1.normal.textColor = textCol; 65 | Styles.Label1.Draw(rect, TempGUIContent(go.name), false, false, false, false); 66 | } 67 | } 68 | 69 | // draw icons 70 | if (opt1.icon != null) 71 | { 72 | Rect r = rect; 73 | r.width = r.height; 74 | r.x = (opt1.iconLeft ? 1f + opt1.iconOffs : rect.xMax - (r.width + 3f + opt1.iconOffs)); 75 | GUI.DrawTexture(r, opt1.icon); 76 | } 77 | 78 | if (opt2 != null && opt2.icon != null) 79 | { 80 | Rect r = rect; 81 | r.width = r.height; 82 | r.x = (opt2.iconLeft ? 1f + opt2.iconOffs : rect.xMax - (r.width + 3f + opt2.iconOffs)); 83 | GUI.DrawTexture(r, opt2.icon); 84 | } 85 | } 86 | 87 | private static HierarchyCustomiserAsset LoadSettings() 88 | { 89 | string fn = GetPackageFolder() + "HierarchyCustomiserEdSettings.asset"; 90 | HierarchyCustomiserAsset asset = AssetDatabase.LoadAssetAtPath(fn); 91 | if (asset == null) 92 | { 93 | asset = ScriptableObject.CreateInstance(); 94 | asset.InitNew(); 95 | AssetDatabase.CreateAsset(asset, fn); 96 | AssetDatabase.SaveAssets(); 97 | } 98 | return asset; 99 | } 100 | 101 | private static GUIContent TempGUIContent(string label) 102 | { 103 | GC_Temp.text = label; 104 | return GC_Temp; 105 | } 106 | 107 | private static string GetPackageFolder() 108 | { 109 | string[] res = System.IO.Directory.GetFiles(Application.dataPath, "HierarchyCustomiserEd.cs", System.IO.SearchOption.AllDirectories); 110 | if (res.Length == 0) return null; 111 | return "Assets" + res[0].Replace(Application.dataPath, "").Replace("HierarchyCustomiserEd.cs", "").Replace("\\", "/"); 112 | } 113 | 114 | // ------------------------------------------------------------------------------------------------------------ 115 | } 116 | } -------------------------------------------------------------------------------- /Assets/HierarcyCustomiser/Editor/HierarchyCustomiserEd.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 92a8ea2880235d946bd65a7120bec2ba 3 | timeCreated: 1504078854 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/HierarcyCustomiser/Editor/HierarchyCustomiserEdSettings.asset: -------------------------------------------------------------------------------- 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: 0 11 | m_Script: {fileID: 11500000, guid: 9c541e7e5622a1241b7f1991c1cb20ab, type: 3} 12 | m_Name: HierarchyCustomiserEdSettings 13 | m_EditorClassIdentifier: 14 | layerOps: 15 | - tag: 16 | icon: {fileID: 0} 17 | iconLeft: 0 18 | iconOffs: 0 19 | textColor: {r: 0, g: 0, b: 0, a: 0} 20 | backColor: {r: 0, g: 0, b: 0, a: 0} 21 | - tag: 22 | icon: {fileID: 0} 23 | iconLeft: 0 24 | iconOffs: 0 25 | textColor: {r: 0, g: 0, b: 0, a: 0} 26 | backColor: {r: 0, g: 0, b: 0, a: 0} 27 | - tag: 28 | icon: {fileID: 0} 29 | iconLeft: 0 30 | iconOffs: 0 31 | textColor: {r: 0, g: 0, b: 0, a: 0} 32 | backColor: {r: 0, g: 0, b: 0, a: 0} 33 | - tag: 34 | icon: {fileID: 0} 35 | iconLeft: 0 36 | iconOffs: 0 37 | textColor: {r: 0, g: 0, b: 0, a: 0} 38 | backColor: {r: 0, g: 0, b: 0, a: 0} 39 | - tag: 40 | icon: {fileID: 2800000, guid: cd0f16ac980dd7748a217342d6c2a0dc, type: 3} 41 | iconLeft: 0 42 | iconOffs: 0 43 | textColor: {r: 0, g: 0, b: 0, a: 0} 44 | backColor: {r: 0, g: 0, b: 0, a: 0} 45 | - tag: 46 | icon: {fileID: 0} 47 | iconLeft: 0 48 | iconOffs: 0 49 | textColor: {r: 0, g: 0, b: 0, a: 0} 50 | backColor: {r: 0, g: 0, b: 0, a: 0} 51 | - tag: 52 | icon: {fileID: 0} 53 | iconLeft: 0 54 | iconOffs: 0 55 | textColor: {r: 0, g: 0, b: 0, a: 0} 56 | backColor: {r: 0, g: 0, b: 0, a: 0} 57 | - tag: 58 | icon: {fileID: 0} 59 | iconLeft: 0 60 | iconOffs: 0 61 | textColor: {r: 0, g: 0, b: 0, a: 0} 62 | backColor: {r: 0, g: 0, b: 0, a: 0} 63 | - tag: 64 | icon: {fileID: 0} 65 | iconLeft: 0 66 | iconOffs: 0 67 | textColor: {r: 0, g: 0, b: 0, a: 0} 68 | backColor: {r: 0, g: 0, b: 0, a: 0} 69 | - tag: 70 | icon: {fileID: 0} 71 | iconLeft: 0 72 | iconOffs: 0 73 | textColor: {r: 0, g: 0, b: 0, a: 0} 74 | backColor: {r: 0, g: 0, b: 0, a: 0} 75 | - tag: 76 | icon: {fileID: 0} 77 | iconLeft: 0 78 | iconOffs: 0 79 | textColor: {r: 0, g: 0, b: 0, a: 0} 80 | backColor: {r: 0, g: 0, b: 0, a: 0} 81 | - tag: 82 | icon: {fileID: 0} 83 | iconLeft: 0 84 | iconOffs: 0 85 | textColor: {r: 0, g: 0, b: 0, a: 0} 86 | backColor: {r: 0, g: 0, b: 0, a: 0} 87 | - tag: 88 | icon: {fileID: 0} 89 | iconLeft: 0 90 | iconOffs: 0 91 | textColor: {r: 0, g: 0, b: 0, a: 0} 92 | backColor: {r: 0, g: 0, b: 0, a: 0} 93 | - tag: 94 | icon: {fileID: 0} 95 | iconLeft: 0 96 | iconOffs: 0 97 | textColor: {r: 0, g: 0, b: 0, a: 0} 98 | backColor: {r: 0, g: 0, b: 0, a: 0} 99 | - tag: 100 | icon: {fileID: 0} 101 | iconLeft: 0 102 | iconOffs: 0 103 | textColor: {r: 0, g: 0, b: 0, a: 0} 104 | backColor: {r: 0, g: 0, b: 0, a: 0} 105 | - tag: 106 | icon: {fileID: 0} 107 | iconLeft: 0 108 | iconOffs: 0 109 | textColor: {r: 0, g: 0, b: 0, a: 0} 110 | backColor: {r: 0, g: 0, b: 0, a: 0} 111 | - tag: 112 | icon: {fileID: 0} 113 | iconLeft: 0 114 | iconOffs: 0 115 | textColor: {r: 0, g: 0, b: 0, a: 0} 116 | backColor: {r: 0, g: 0, b: 0, a: 0} 117 | - tag: 118 | icon: {fileID: 0} 119 | iconLeft: 0 120 | iconOffs: 0 121 | textColor: {r: 0, g: 0, b: 0, a: 0} 122 | backColor: {r: 0, g: 0, b: 0, a: 0} 123 | - tag: 124 | icon: {fileID: 0} 125 | iconLeft: 0 126 | iconOffs: 0 127 | textColor: {r: 0, g: 0, b: 0, a: 0} 128 | backColor: {r: 0, g: 0, b: 0, a: 0} 129 | - tag: 130 | icon: {fileID: 0} 131 | iconLeft: 0 132 | iconOffs: 0 133 | textColor: {r: 0, g: 0, b: 0, a: 0} 134 | backColor: {r: 0, g: 0, b: 0, a: 0} 135 | - tag: 136 | icon: {fileID: 0} 137 | iconLeft: 0 138 | iconOffs: 0 139 | textColor: {r: 0, g: 0, b: 0, a: 0} 140 | backColor: {r: 0, g: 0, b: 0, a: 0} 141 | - tag: 142 | icon: {fileID: 0} 143 | iconLeft: 0 144 | iconOffs: 0 145 | textColor: {r: 0, g: 0, b: 0, a: 0} 146 | backColor: {r: 0, g: 0, b: 0, a: 0} 147 | - tag: 148 | icon: {fileID: 0} 149 | iconLeft: 0 150 | iconOffs: 0 151 | textColor: {r: 0, g: 0, b: 0, a: 0} 152 | backColor: {r: 0, g: 0, b: 0, a: 0} 153 | - tag: 154 | icon: {fileID: 0} 155 | iconLeft: 0 156 | iconOffs: 0 157 | textColor: {r: 0, g: 0, b: 0, a: 0} 158 | backColor: {r: 0, g: 0, b: 0, a: 0} 159 | - tag: 160 | icon: {fileID: 0} 161 | iconLeft: 0 162 | iconOffs: 0 163 | textColor: {r: 0, g: 0, b: 0, a: 0} 164 | backColor: {r: 0, g: 0, b: 0, a: 0} 165 | - tag: 166 | icon: {fileID: 0} 167 | iconLeft: 0 168 | iconOffs: 0 169 | textColor: {r: 0, g: 0, b: 0, a: 0} 170 | backColor: {r: 0, g: 0, b: 0, a: 0} 171 | - tag: 172 | icon: {fileID: 0} 173 | iconLeft: 0 174 | iconOffs: 0 175 | textColor: {r: 0, g: 0, b: 0, a: 0} 176 | backColor: {r: 0, g: 0, b: 0, a: 0} 177 | - tag: 178 | icon: {fileID: 0} 179 | iconLeft: 0 180 | iconOffs: 0 181 | textColor: {r: 0, g: 0, b: 0, a: 0} 182 | backColor: {r: 0, g: 0, b: 0, a: 0} 183 | - tag: 184 | icon: {fileID: 0} 185 | iconLeft: 0 186 | iconOffs: 0 187 | textColor: {r: 0, g: 0, b: 0, a: 0} 188 | backColor: {r: 0, g: 0, b: 0, a: 0} 189 | - tag: 190 | icon: {fileID: 0} 191 | iconLeft: 0 192 | iconOffs: 0 193 | textColor: {r: 0, g: 0, b: 0, a: 0} 194 | backColor: {r: 0, g: 0, b: 0, a: 0} 195 | - tag: 196 | icon: {fileID: 0} 197 | iconLeft: 0 198 | iconOffs: 0 199 | textColor: {r: 0, g: 0, b: 0, a: 0} 200 | backColor: {r: 0, g: 0, b: 0, a: 0} 201 | - tag: 202 | icon: {fileID: 0} 203 | iconLeft: 0 204 | iconOffs: 0 205 | textColor: {r: 0, g: 0, b: 0, a: 0} 206 | backColor: {r: 0, g: 0, b: 0, a: 0} 207 | tagOps: 208 | - tag: EditorOnly 209 | icon: {fileID: 2800000, guid: 9af8cef9ab50ecb439c3a4880cb0971e, type: 3} 210 | iconLeft: 1 211 | iconOffs: 0 212 | textColor: {r: 1, g: 0, b: 0, a: 1} 213 | backColor: {r: 0.40679064, g: 0.72794116, b: 0.4488724, a: 1} 214 | - tag: GameController 215 | icon: {fileID: 2800000, guid: 24c9aad501e24db44b71623394b5bd40, type: 3} 216 | iconLeft: 0 217 | iconOffs: 20 218 | textColor: {r: 0, g: 0, b: 0, a: 0} 219 | backColor: {r: 0, g: 0, b: 0, a: 0} 220 | -------------------------------------------------------------------------------- /Assets/HierarcyCustomiser/Editor/HierarchyCustomiserEdSettings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7fad3543ae227d249a48b8620058941b 3 | timeCreated: 1504079105 4 | licenseType: Free 5 | NativeFormatImporter: 6 | mainObjectFileID: 11400000 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/HierarcyCustomiser/Editor/HierarchyCustomiserEdWindow.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | using UnityEditor; 4 | using UnityEditor.IMGUI.Controls; 5 | 6 | 7 | namespace HierarchyCustomiser 8 | { 9 | [InitializeOnLoad] 10 | public class HierarchyCustomiserEdWindow : EditorWindow 11 | { 12 | public static class Styles 13 | { 14 | public static GUIStyle Head; 15 | public static GUIStyle[] Row = new GUIStyle[2]; 16 | 17 | static Styles() 18 | { 19 | Head = new GUIStyle() { margin = new RectOffset(3, 3, 0, 1), padding = new RectOffset(3, 5, 3, 3), richText = false }; 20 | Row[0] = new GUIStyle("OL EntryBackEven") { margin = new RectOffset(3, 3, 0, 1), padding = new RectOffset(3, 5, 3, 3), richText = false }; 21 | Row[1] = new GUIStyle("OL EntryBackOdd") { margin = new RectOffset(3, 3, 0, 1), padding = new RectOffset(3, 5, 3, 3), richText = false }; 22 | } 23 | } 24 | 25 | private static readonly GUIContent GC_LayersHead = new GUIContent("Layers"); 26 | private static readonly GUIContent GC_TagsHead = new GUIContent("Tags"); 27 | private static readonly GUIContent[] GC_Head = { new GUIContent("Entry"), new GUIContent("Ico"), new GUIContent("L"), new GUIContent("Offs"), new GUIContent("Text"), new GUIContent("Back") }; 28 | private static readonly GUIContent GC_ClearOpt = new GUIContent("X", "Clear/remove setting"); 29 | private static readonly GUIContent GC_Add = new GUIContent("Add"); 30 | private static GUIContent GC_Temp = new GUIContent(""); 31 | 32 | private Vector2 scroll; 33 | private bool[] foldout = { true, true }; 34 | 35 | // ------------------------------------------------------------------------------------------------------------ 36 | 37 | [MenuItem("Window/Hierarchy Customiser")] 38 | public static void Show_Window() 39 | { 40 | GetWindow("HierarchyCustomiser", true); 41 | } 42 | 43 | private void OnGUI() 44 | { 45 | scroll = EditorGUILayout.BeginScrollView(scroll); 46 | LayersOps(); 47 | EditorGUILayout.Space(); 48 | TagOps(); 49 | EditorGUILayout.Space(); 50 | EditorGUILayout.EndScrollView(); 51 | } 52 | 53 | private void LayersOps() 54 | { 55 | if (!(foldout[0] = EditorGUILayout.Foldout(foldout[0], GC_LayersHead))) return; 56 | 57 | DrawHead(false); 58 | EditorGUI.BeginChangeCheck(); 59 | for (int i = 0; i < 32; i++) 60 | { 61 | EditorGUILayout.BeginHorizontal(Styles.Row[i % 2 == 0 ? 0 : 1]); 62 | DrawOpt(TempGUIContent("{0:00}:{1}", i, LayerMask.LayerToName(i)), HierarchyCustomiserEd.Settings.layerOps[i]); 63 | EditorGUILayout.EndHorizontal(); 64 | } 65 | 66 | if (EditorGUI.EndChangeCheck()) 67 | { 68 | EditorUtility.SetDirty(HierarchyCustomiserEd.Settings); 69 | EditorApplication.RepaintHierarchyWindow(); 70 | } 71 | } 72 | 73 | private void TagOps() 74 | { 75 | if (!(foldout[1] = EditorGUILayout.Foldout(foldout[1], GC_TagsHead))) return; 76 | 77 | bool dirty = false; 78 | int rem = -1; 79 | 80 | EditorGUILayout.Space(); 81 | if (DrawHead(true)) 82 | { 83 | dirty = true; 84 | HierarchyCustomiserEd.Settings.tagOps.Add(new HierarchyCustomiserOption()); 85 | } 86 | 87 | ; 88 | EditorGUI.BeginChangeCheck(); 89 | for (int i = 0; i < HierarchyCustomiserEd.Settings.tagOps.Count; i++) 90 | { 91 | EditorGUILayout.BeginHorizontal(Styles.Row[i % 2 == 0 ? 0 : 1]); 92 | if (DrawOpt(null, HierarchyCustomiserEd.Settings.tagOps[i])) rem = i; 93 | EditorGUILayout.EndHorizontal(); 94 | } 95 | 96 | if (rem >= 0) 97 | { 98 | HierarchyCustomiserEd.Settings.tagOps.RemoveAt(rem); 99 | dirty = true; 100 | } 101 | 102 | if (EditorGUI.EndChangeCheck() || dirty) 103 | { 104 | EditorUtility.SetDirty(HierarchyCustomiserEd.Settings); 105 | EditorApplication.RepaintHierarchyWindow(); 106 | } 107 | } 108 | 109 | private static bool DrawHead(bool forTags) 110 | { 111 | bool res = false; 112 | EditorGUILayout.BeginHorizontal(Styles.Head); 113 | GUILayout.Label(GC_Head[0], EditorStyles.boldLabel); 114 | if (forTags) res = GUILayout.Button(GC_Add, EditorStyles.miniButton, GUILayout.Width(32)); 115 | GUILayout.FlexibleSpace(); 116 | GUILayout.Label(GC_Head[1], EditorStyles.boldLabel, GUILayout.Width(30)); 117 | GUILayout.Label(GC_Head[2], EditorStyles.boldLabel, GUILayout.Width(20)); 118 | GUILayout.Label(GC_Head[3], EditorStyles.boldLabel, GUILayout.Width(30)); 119 | GUILayout.Space(5); 120 | GUILayout.Label(GC_Head[4], EditorStyles.boldLabel, GUILayout.Width(40)); 121 | GUILayout.Label(GC_Head[5], EditorStyles.boldLabel, GUILayout.Width(40)); 122 | EditorGUILayout.EndHorizontal(); 123 | return res; 124 | } 125 | 126 | private static bool DrawOpt(GUIContent label, HierarchyCustomiserOption opt) 127 | { 128 | bool res = false; 129 | if (res = GUILayout.Button(GC_ClearOpt, EditorStyles.miniButton, GUILayout.Width(18))) 130 | { 131 | opt.icon = null; 132 | opt.iconLeft = false; 133 | opt.iconOffs = 0; 134 | } 135 | 136 | if (label == null) 137 | { // is for tag when label = null 138 | opt.tag = EditorGUILayout.TagField(opt.tag, GUILayout.Width(100)); 139 | GUILayout.FlexibleSpace(); 140 | } 141 | else 142 | { 143 | GUILayout.Label(label, GUILayout.ExpandWidth(true)); 144 | } 145 | 146 | opt.icon = (Texture2D)EditorGUILayout.ObjectField(opt.icon, typeof(Texture2D), false, GUILayout.Width(30)); 147 | opt.iconLeft = EditorGUILayout.Toggle(opt.iconLeft, GUILayout.Width(20)); 148 | opt.iconOffs = EditorGUILayout.IntField(opt.iconOffs, GUILayout.Width(30)); 149 | GUILayout.Space(5); 150 | opt.textColor = EditorGUILayout.ColorField(opt.textColor, GUILayout.Width(40)); 151 | opt.backColor = EditorGUILayout.ColorField(opt.backColor, GUILayout.Width(40)); 152 | return res; 153 | } 154 | 155 | private static GUIContent TempGUIContent(string label, params object[] args) 156 | { 157 | GC_Temp.text = string.Format(label, args); 158 | return GC_Temp; 159 | } 160 | 161 | // ------------------------------------------------------------------------------------------------------------ 162 | } 163 | } -------------------------------------------------------------------------------- /Assets/HierarcyCustomiser/Editor/HierarchyCustomiserEdWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: daa2493b3065c4a429c13262b00c839a 3 | timeCreated: 1504079637 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/Sample.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7e3c4f4e282b86a41a0f584334a5b895 3 | folderAsset: yes 4 | timeCreated: 1504086944 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Sample/SampleIcons.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8c46da181fd73e34bbf24d2bc6aeafed 3 | folderAsset: yes 4 | timeCreated: 1504078837 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Sample/SampleIcons/ico_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plyoung/HierarchyCustomiser/64740c45068d04f5239986d2bcb3272c597ac79b/Assets/Sample/SampleIcons/ico_blue.png -------------------------------------------------------------------------------- /Assets/Sample/SampleIcons/ico_blue.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cd0f16ac980dd7748a217342d6c2a0dc 3 | timeCreated: 1504079999 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 4 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | sRGBTexture: 0 12 | linearTexture: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapsPreserveCoverage: 0 16 | alphaTestReferenceValue: 0.5 17 | mipMapFadeDistanceStart: 1 18 | mipMapFadeDistanceEnd: 3 19 | bumpmap: 20 | convertToNormalMap: 0 21 | externalNormalMap: 0 22 | heightScale: 0.25 23 | normalMapFilter: 0 24 | isReadable: 0 25 | grayScaleToAlpha: 0 26 | generateCubemap: 6 27 | cubemapConvolution: 0 28 | seamlessCubemap: 0 29 | textureFormat: 1 30 | maxTextureSize: 2048 31 | textureSettings: 32 | serializedVersion: 2 33 | filterMode: 0 34 | aniso: 1 35 | mipBias: -1 36 | wrapU: 1 37 | wrapV: 1 38 | wrapW: 1 39 | nPOTScale: 0 40 | lightmap: 0 41 | compressionQuality: 50 42 | spriteMode: 0 43 | spriteExtrude: 1 44 | spriteMeshType: 1 45 | alignment: 0 46 | spritePivot: {x: 0.5, y: 0.5} 47 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 48 | spritePixelsToUnits: 100 49 | alphaUsage: 1 50 | alphaIsTransparency: 1 51 | spriteTessellationDetail: -1 52 | textureType: 2 53 | textureShape: 1 54 | maxTextureSizeSet: 0 55 | compressionQualitySet: 0 56 | textureFormatSet: 0 57 | platformSettings: 58 | - buildTarget: DefaultTexturePlatform 59 | maxTextureSize: 2048 60 | textureFormat: -1 61 | textureCompression: 1 62 | compressionQuality: 50 63 | crunchedCompression: 0 64 | allowsAlphaSplitting: 0 65 | overridden: 0 66 | - buildTarget: Standalone 67 | maxTextureSize: 2048 68 | textureFormat: -1 69 | textureCompression: 1 70 | compressionQuality: 50 71 | crunchedCompression: 0 72 | allowsAlphaSplitting: 0 73 | overridden: 0 74 | - buildTarget: Android 75 | maxTextureSize: 2048 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | - buildTarget: Windows Store Apps 83 | maxTextureSize: 2048 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | - buildTarget: WebGL 91 | maxTextureSize: 2048 92 | textureFormat: -1 93 | textureCompression: 1 94 | compressionQuality: 50 95 | crunchedCompression: 0 96 | allowsAlphaSplitting: 0 97 | overridden: 0 98 | spriteSheet: 99 | serializedVersion: 2 100 | sprites: [] 101 | outline: [] 102 | physicsShape: [] 103 | spritePackingTag: 104 | userData: 105 | assetBundleName: 106 | assetBundleVariant: 107 | -------------------------------------------------------------------------------- /Assets/Sample/SampleIcons/ico_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plyoung/HierarchyCustomiser/64740c45068d04f5239986d2bcb3272c597ac79b/Assets/Sample/SampleIcons/ico_green.png -------------------------------------------------------------------------------- /Assets/Sample/SampleIcons/ico_green.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 24c9aad501e24db44b71623394b5bd40 3 | timeCreated: 1504079999 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 4 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | sRGBTexture: 0 12 | linearTexture: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapsPreserveCoverage: 0 16 | alphaTestReferenceValue: 0.5 17 | mipMapFadeDistanceStart: 1 18 | mipMapFadeDistanceEnd: 3 19 | bumpmap: 20 | convertToNormalMap: 0 21 | externalNormalMap: 0 22 | heightScale: 0.25 23 | normalMapFilter: 0 24 | isReadable: 0 25 | grayScaleToAlpha: 0 26 | generateCubemap: 6 27 | cubemapConvolution: 0 28 | seamlessCubemap: 0 29 | textureFormat: 1 30 | maxTextureSize: 2048 31 | textureSettings: 32 | serializedVersion: 2 33 | filterMode: 0 34 | aniso: 1 35 | mipBias: -1 36 | wrapU: 1 37 | wrapV: 1 38 | wrapW: 1 39 | nPOTScale: 0 40 | lightmap: 0 41 | compressionQuality: 50 42 | spriteMode: 0 43 | spriteExtrude: 1 44 | spriteMeshType: 1 45 | alignment: 0 46 | spritePivot: {x: 0.5, y: 0.5} 47 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 48 | spritePixelsToUnits: 100 49 | alphaUsage: 1 50 | alphaIsTransparency: 1 51 | spriteTessellationDetail: -1 52 | textureType: 2 53 | textureShape: 1 54 | maxTextureSizeSet: 0 55 | compressionQualitySet: 0 56 | textureFormatSet: 0 57 | platformSettings: 58 | - buildTarget: DefaultTexturePlatform 59 | maxTextureSize: 2048 60 | textureFormat: -1 61 | textureCompression: 1 62 | compressionQuality: 50 63 | crunchedCompression: 0 64 | allowsAlphaSplitting: 0 65 | overridden: 0 66 | - buildTarget: Standalone 67 | maxTextureSize: 2048 68 | textureFormat: -1 69 | textureCompression: 1 70 | compressionQuality: 50 71 | crunchedCompression: 0 72 | allowsAlphaSplitting: 0 73 | overridden: 0 74 | - buildTarget: Android 75 | maxTextureSize: 2048 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | - buildTarget: Windows Store Apps 83 | maxTextureSize: 2048 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | - buildTarget: WebGL 91 | maxTextureSize: 2048 92 | textureFormat: -1 93 | textureCompression: 1 94 | compressionQuality: 50 95 | crunchedCompression: 0 96 | allowsAlphaSplitting: 0 97 | overridden: 0 98 | spriteSheet: 99 | serializedVersion: 2 100 | sprites: [] 101 | outline: [] 102 | physicsShape: [] 103 | spritePackingTag: 104 | userData: 105 | assetBundleName: 106 | assetBundleVariant: 107 | -------------------------------------------------------------------------------- /Assets/Sample/SampleIcons/ico_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plyoung/HierarchyCustomiser/64740c45068d04f5239986d2bcb3272c597ac79b/Assets/Sample/SampleIcons/ico_red.png -------------------------------------------------------------------------------- /Assets/Sample/SampleIcons/ico_red.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9af8cef9ab50ecb439c3a4880cb0971e 3 | timeCreated: 1504079999 4 | licenseType: Free 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 4 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | sRGBTexture: 0 12 | linearTexture: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapsPreserveCoverage: 0 16 | alphaTestReferenceValue: 0.5 17 | mipMapFadeDistanceStart: 1 18 | mipMapFadeDistanceEnd: 3 19 | bumpmap: 20 | convertToNormalMap: 0 21 | externalNormalMap: 0 22 | heightScale: 0.25 23 | normalMapFilter: 0 24 | isReadable: 0 25 | grayScaleToAlpha: 0 26 | generateCubemap: 6 27 | cubemapConvolution: 0 28 | seamlessCubemap: 0 29 | textureFormat: 1 30 | maxTextureSize: 2048 31 | textureSettings: 32 | serializedVersion: 2 33 | filterMode: 0 34 | aniso: 1 35 | mipBias: -1 36 | wrapU: 1 37 | wrapV: 1 38 | wrapW: 1 39 | nPOTScale: 0 40 | lightmap: 0 41 | compressionQuality: 50 42 | spriteMode: 0 43 | spriteExtrude: 1 44 | spriteMeshType: 1 45 | alignment: 0 46 | spritePivot: {x: 0.5, y: 0.5} 47 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 48 | spritePixelsToUnits: 100 49 | alphaUsage: 1 50 | alphaIsTransparency: 1 51 | spriteTessellationDetail: -1 52 | textureType: 2 53 | textureShape: 1 54 | maxTextureSizeSet: 0 55 | compressionQualitySet: 0 56 | textureFormatSet: 0 57 | platformSettings: 58 | - buildTarget: DefaultTexturePlatform 59 | maxTextureSize: 2048 60 | textureFormat: -1 61 | textureCompression: 1 62 | compressionQuality: 50 63 | crunchedCompression: 0 64 | allowsAlphaSplitting: 0 65 | overridden: 0 66 | - buildTarget: Standalone 67 | maxTextureSize: 2048 68 | textureFormat: -1 69 | textureCompression: 1 70 | compressionQuality: 50 71 | crunchedCompression: 0 72 | allowsAlphaSplitting: 0 73 | overridden: 0 74 | - buildTarget: Android 75 | maxTextureSize: 2048 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | - buildTarget: Windows Store Apps 83 | maxTextureSize: 2048 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | - buildTarget: WebGL 91 | maxTextureSize: 2048 92 | textureFormat: -1 93 | textureCompression: 1 94 | compressionQuality: 50 95 | crunchedCompression: 0 96 | allowsAlphaSplitting: 0 97 | overridden: 0 98 | spriteSheet: 99 | serializedVersion: 2 100 | sprites: [] 101 | outline: [] 102 | physicsShape: [] 103 | spritePackingTag: 104 | userData: 105 | assetBundleName: 106 | assetBundleVariant: 107 | -------------------------------------------------------------------------------- /Assets/Sample/sample_ccene.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: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 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.44657844, g: 0.49641222, b: 0.57481694, a: 1} 42 | --- !u!157 &3 43 | LightmapSettings: 44 | m_ObjectHideFlags: 0 45 | serializedVersion: 11 46 | m_GIWorkflowMode: 0 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: 1 55 | m_EnableRealtimeLightmaps: 1 56 | m_LightmapEditorSettings: 57 | serializedVersion: 9 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: 1 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: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 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_UseShadowmask: 1 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 &45491667 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: 45491668} 119 | m_Layer: 0 120 | m_Name: Object (1) 121 | m_TagString: Untagged 122 | m_Icon: {fileID: 0} 123 | m_NavMeshLayer: 0 124 | m_StaticEditorFlags: 0 125 | m_IsActive: 1 126 | --- !u!4 &45491668 127 | Transform: 128 | m_ObjectHideFlags: 0 129 | m_PrefabParentObject: {fileID: 0} 130 | m_PrefabInternal: {fileID: 0} 131 | m_GameObject: {fileID: 45491667} 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: 800661727} 137 | m_RootOrder: 1 138 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 139 | --- !u!1 &70141169 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: 70141170} 147 | m_Layer: 0 148 | m_Name: '--- woops ---' 149 | m_TagString: EditorOnly 150 | m_Icon: {fileID: 0} 151 | m_NavMeshLayer: 0 152 | m_StaticEditorFlags: 0 153 | m_IsActive: 1 154 | --- !u!4 &70141170 155 | Transform: 156 | m_ObjectHideFlags: 0 157 | m_PrefabParentObject: {fileID: 0} 158 | m_PrefabInternal: {fileID: 0} 159 | m_GameObject: {fileID: 70141169} 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: 2 166 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 167 | --- !u!1 &335994956 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: 335994957} 175 | m_Layer: 4 176 | m_Name: Object (0) 177 | m_TagString: GameController 178 | m_Icon: {fileID: 0} 179 | m_NavMeshLayer: 0 180 | m_StaticEditorFlags: 0 181 | m_IsActive: 1 182 | --- !u!4 &335994957 183 | Transform: 184 | m_ObjectHideFlags: 0 185 | m_PrefabParentObject: {fileID: 0} 186 | m_PrefabInternal: {fileID: 0} 187 | m_GameObject: {fileID: 335994956} 188 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 189 | m_LocalPosition: {x: 0, y: 0, z: 0} 190 | m_LocalScale: {x: 1, y: 1, z: 1} 191 | m_Children: [] 192 | m_Father: {fileID: 0} 193 | m_RootOrder: 3 194 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 195 | --- !u!1 &710191229 196 | GameObject: 197 | m_ObjectHideFlags: 0 198 | m_PrefabParentObject: {fileID: 0} 199 | m_PrefabInternal: {fileID: 0} 200 | serializedVersion: 5 201 | m_Component: 202 | - component: {fileID: 710191231} 203 | - component: {fileID: 710191230} 204 | m_Layer: 0 205 | m_Name: Directional Light 206 | m_TagString: Untagged 207 | m_Icon: {fileID: 0} 208 | m_NavMeshLayer: 0 209 | m_StaticEditorFlags: 0 210 | m_IsActive: 1 211 | --- !u!108 &710191230 212 | Light: 213 | m_ObjectHideFlags: 0 214 | m_PrefabParentObject: {fileID: 0} 215 | m_PrefabInternal: {fileID: 0} 216 | m_GameObject: {fileID: 710191229} 217 | m_Enabled: 1 218 | serializedVersion: 8 219 | m_Type: 1 220 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 221 | m_Intensity: 1 222 | m_Range: 10 223 | m_SpotAngle: 30 224 | m_CookieSize: 10 225 | m_Shadows: 226 | m_Type: 2 227 | m_Resolution: -1 228 | m_CustomResolution: -1 229 | m_Strength: 1 230 | m_Bias: 0.05 231 | m_NormalBias: 0.4 232 | m_NearPlane: 0.2 233 | m_Cookie: {fileID: 0} 234 | m_DrawHalo: 0 235 | m_Flare: {fileID: 0} 236 | m_RenderMode: 0 237 | m_CullingMask: 238 | serializedVersion: 2 239 | m_Bits: 4294967295 240 | m_Lightmapping: 4 241 | m_AreaSize: {x: 1, y: 1} 242 | m_BounceIntensity: 1 243 | m_FalloffTable: 244 | m_Table[0]: 0 245 | m_Table[1]: 0 246 | m_Table[2]: 0 247 | m_Table[3]: 0 248 | m_Table[4]: 0 249 | m_Table[5]: 0 250 | m_Table[6]: 0 251 | m_Table[7]: 0 252 | m_Table[8]: 0 253 | m_Table[9]: 0 254 | m_Table[10]: 0 255 | m_Table[11]: 0 256 | m_Table[12]: 0 257 | m_ColorTemperature: 6570 258 | m_UseColorTemperature: 0 259 | m_ShadowRadius: 0 260 | m_ShadowAngle: 0 261 | --- !u!4 &710191231 262 | Transform: 263 | m_ObjectHideFlags: 0 264 | m_PrefabParentObject: {fileID: 0} 265 | m_PrefabInternal: {fileID: 0} 266 | m_GameObject: {fileID: 710191229} 267 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 268 | m_LocalPosition: {x: 0, y: 3, z: 0} 269 | m_LocalScale: {x: 1, y: 1, z: 1} 270 | m_Children: [] 271 | m_Father: {fileID: 0} 272 | m_RootOrder: 1 273 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 274 | --- !u!1 &800661726 275 | GameObject: 276 | m_ObjectHideFlags: 0 277 | m_PrefabParentObject: {fileID: 0} 278 | m_PrefabInternal: {fileID: 0} 279 | serializedVersion: 5 280 | m_Component: 281 | - component: {fileID: 800661727} 282 | m_Layer: 0 283 | m_Name: Object (2) 284 | m_TagString: Untagged 285 | m_Icon: {fileID: 0} 286 | m_NavMeshLayer: 0 287 | m_StaticEditorFlags: 0 288 | m_IsActive: 1 289 | --- !u!4 &800661727 290 | Transform: 291 | m_ObjectHideFlags: 0 292 | m_PrefabParentObject: {fileID: 0} 293 | m_PrefabInternal: {fileID: 0} 294 | m_GameObject: {fileID: 800661726} 295 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 296 | m_LocalPosition: {x: 0, y: 0, z: 0} 297 | m_LocalScale: {x: 1, y: 1, z: 1} 298 | m_Children: 299 | - {fileID: 1565762321} 300 | - {fileID: 45491668} 301 | m_Father: {fileID: 0} 302 | m_RootOrder: 6 303 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 304 | --- !u!1 &827236886 305 | GameObject: 306 | m_ObjectHideFlags: 0 307 | m_PrefabParentObject: {fileID: 0} 308 | m_PrefabInternal: {fileID: 0} 309 | serializedVersion: 5 310 | m_Component: 311 | - component: {fileID: 827236887} 312 | m_Layer: 0 313 | m_Name: '--- derp ---' 314 | m_TagString: EditorOnly 315 | m_Icon: {fileID: 0} 316 | m_NavMeshLayer: 0 317 | m_StaticEditorFlags: 0 318 | m_IsActive: 1 319 | --- !u!4 &827236887 320 | Transform: 321 | m_ObjectHideFlags: 0 322 | m_PrefabParentObject: {fileID: 0} 323 | m_PrefabInternal: {fileID: 0} 324 | m_GameObject: {fileID: 827236886} 325 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 326 | m_LocalPosition: {x: 0, y: 0, z: 0} 327 | m_LocalScale: {x: 1, y: 1, z: 1} 328 | m_Children: [] 329 | m_Father: {fileID: 0} 330 | m_RootOrder: 5 331 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 332 | --- !u!1 &1034590299 333 | GameObject: 334 | m_ObjectHideFlags: 0 335 | m_PrefabParentObject: {fileID: 0} 336 | m_PrefabInternal: {fileID: 0} 337 | serializedVersion: 5 338 | m_Component: 339 | - component: {fileID: 1034590304} 340 | - component: {fileID: 1034590303} 341 | - component: {fileID: 1034590302} 342 | - component: {fileID: 1034590301} 343 | - component: {fileID: 1034590300} 344 | m_Layer: 0 345 | m_Name: Main Camera 346 | m_TagString: Untagged 347 | m_Icon: {fileID: 0} 348 | m_NavMeshLayer: 0 349 | m_StaticEditorFlags: 0 350 | m_IsActive: 1 351 | --- !u!81 &1034590300 352 | AudioListener: 353 | m_ObjectHideFlags: 0 354 | m_PrefabParentObject: {fileID: 0} 355 | m_PrefabInternal: {fileID: 0} 356 | m_GameObject: {fileID: 1034590299} 357 | m_Enabled: 1 358 | --- !u!124 &1034590301 359 | Behaviour: 360 | m_ObjectHideFlags: 0 361 | m_PrefabParentObject: {fileID: 0} 362 | m_PrefabInternal: {fileID: 0} 363 | m_GameObject: {fileID: 1034590299} 364 | m_Enabled: 1 365 | --- !u!92 &1034590302 366 | Behaviour: 367 | m_ObjectHideFlags: 0 368 | m_PrefabParentObject: {fileID: 0} 369 | m_PrefabInternal: {fileID: 0} 370 | m_GameObject: {fileID: 1034590299} 371 | m_Enabled: 1 372 | --- !u!20 &1034590303 373 | Camera: 374 | m_ObjectHideFlags: 0 375 | m_PrefabParentObject: {fileID: 0} 376 | m_PrefabInternal: {fileID: 0} 377 | m_GameObject: {fileID: 1034590299} 378 | m_Enabled: 1 379 | serializedVersion: 2 380 | m_ClearFlags: 1 381 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 382 | m_NormalizedViewPortRect: 383 | serializedVersion: 2 384 | x: 0 385 | y: 0 386 | width: 1 387 | height: 1 388 | near clip plane: 0.3 389 | far clip plane: 1000 390 | field of view: 60 391 | orthographic: 0 392 | orthographic size: 5 393 | m_Depth: -1 394 | m_CullingMask: 395 | serializedVersion: 2 396 | m_Bits: 4294967295 397 | m_RenderingPath: -1 398 | m_TargetTexture: {fileID: 0} 399 | m_TargetDisplay: 0 400 | m_TargetEye: 3 401 | m_HDR: 1 402 | m_AllowMSAA: 1 403 | m_ForceIntoRT: 0 404 | m_OcclusionCulling: 1 405 | m_StereoConvergence: 10 406 | m_StereoSeparation: 0.022 407 | m_StereoMirrorMode: 0 408 | --- !u!4 &1034590304 409 | Transform: 410 | m_ObjectHideFlags: 0 411 | m_PrefabParentObject: {fileID: 0} 412 | m_PrefabInternal: {fileID: 0} 413 | m_GameObject: {fileID: 1034590299} 414 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 415 | m_LocalPosition: {x: 0, y: 1, z: -10} 416 | m_LocalScale: {x: 1, y: 1, z: 1} 417 | m_Children: [] 418 | m_Father: {fileID: 0} 419 | m_RootOrder: 0 420 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 421 | --- !u!1 &1256819599 422 | GameObject: 423 | m_ObjectHideFlags: 0 424 | m_PrefabParentObject: {fileID: 0} 425 | m_PrefabInternal: {fileID: 0} 426 | serializedVersion: 5 427 | m_Component: 428 | - component: {fileID: 1256819600} 429 | m_Layer: 0 430 | m_Name: Object (3) 431 | m_TagString: Untagged 432 | m_Icon: {fileID: 0} 433 | m_NavMeshLayer: 0 434 | m_StaticEditorFlags: 0 435 | m_IsActive: 1 436 | --- !u!4 &1256819600 437 | Transform: 438 | m_ObjectHideFlags: 0 439 | m_PrefabParentObject: {fileID: 0} 440 | m_PrefabInternal: {fileID: 0} 441 | m_GameObject: {fileID: 1256819599} 442 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 443 | m_LocalPosition: {x: 0, y: 0, z: 0} 444 | m_LocalScale: {x: 1, y: 1, z: 1} 445 | m_Children: [] 446 | m_Father: {fileID: 0} 447 | m_RootOrder: 7 448 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 449 | --- !u!1 &1533083334 450 | GameObject: 451 | m_ObjectHideFlags: 0 452 | m_PrefabParentObject: {fileID: 0} 453 | m_PrefabInternal: {fileID: 0} 454 | serializedVersion: 5 455 | m_Component: 456 | - component: {fileID: 1533083335} 457 | m_Layer: 0 458 | m_Name: Object (1) 459 | m_TagString: Untagged 460 | m_Icon: {fileID: 0} 461 | m_NavMeshLayer: 0 462 | m_StaticEditorFlags: 0 463 | m_IsActive: 1 464 | --- !u!4 &1533083335 465 | Transform: 466 | m_ObjectHideFlags: 0 467 | m_PrefabParentObject: {fileID: 0} 468 | m_PrefabInternal: {fileID: 0} 469 | m_GameObject: {fileID: 1533083334} 470 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 471 | m_LocalPosition: {x: 0, y: 0, z: 0} 472 | m_LocalScale: {x: 1, y: 1, z: 1} 473 | m_Children: [] 474 | m_Father: {fileID: 0} 475 | m_RootOrder: 4 476 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 477 | --- !u!1 &1565762320 478 | GameObject: 479 | m_ObjectHideFlags: 0 480 | m_PrefabParentObject: {fileID: 0} 481 | m_PrefabInternal: {fileID: 0} 482 | serializedVersion: 5 483 | m_Component: 484 | - component: {fileID: 1565762321} 485 | m_Layer: 4 486 | m_Name: Object (0) 487 | m_TagString: GameController 488 | m_Icon: {fileID: 0} 489 | m_NavMeshLayer: 0 490 | m_StaticEditorFlags: 0 491 | m_IsActive: 1 492 | --- !u!4 &1565762321 493 | Transform: 494 | m_ObjectHideFlags: 0 495 | m_PrefabParentObject: {fileID: 0} 496 | m_PrefabInternal: {fileID: 0} 497 | m_GameObject: {fileID: 1565762320} 498 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 499 | m_LocalPosition: {x: 0, y: 0, z: 0} 500 | m_LocalScale: {x: 1, y: 1, z: 1} 501 | m_Children: [] 502 | m_Father: {fileID: 800661727} 503 | m_RootOrder: 0 504 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 505 | -------------------------------------------------------------------------------- /Assets/Sample/sample_ccene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 15c91820ae8a9f545beda7f065e00515 3 | timeCreated: 1504002051 4 | licenseType: Free 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hierarchy Customiser 2 | 3 | This tool allows you to add associate icons, text colour and background colour with Tags and Layers. These options are then applied to entries in the Hierarchy panel. 4 | 5 | - Open the customiser settings via `Window > Hierarchy Customiser`. 6 | - There are options for tags below the layer options (note you can collapse the layer group). 7 | - **Ico** is the icon to use. 8 | - **L** is whether the icon should be shown to the Left or Right. 9 | - **Offs** is the offset of icon from edge of panel. 10 | - **Text** is text colour. An alpha of 0 means it should not be used so be sure to increase the alpha if you use this option. 11 | - **Back** is the background colour. Alpha = 0 means this is not used. 12 | 13 | ![custom](https://user-images.githubusercontent.com/837362/29867443-e57209ca-8d7b-11e7-8682-ec1c2588f734.png) 14 | 15 | 16 | -------------------------------------------------------------------------------- /UNLICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | --------------------------------------------------------------------------------