{"id":41827779,"url":"https://github.com/tylertemp/saintshierarchy","last_synced_at":"2026-07-02T16:02:29.157Z","repository":{"id":330565001,"uuid":"1123173160","full_name":"TylerTemp/SaintsHierarchy","owner":"TylerTemp","description":"Unity Hierarchy enhancement","archived":false,"fork":false,"pushed_at":"2026-06-26T02:33:09.000Z","size":744,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-06-26T04:10:09.393Z","etag":null,"topics":["unity","unity-editor","unity-hierarchy"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TylerTemp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-26T10:24:01.000Z","updated_at":"2026-06-26T02:24:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TylerTemp/SaintsHierarchy","commit_stats":null,"previous_names":["tylertemp/saintshierarchy"],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/TylerTemp/SaintsHierarchy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TylerTemp%2FSaintsHierarchy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TylerTemp%2FSaintsHierarchy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TylerTemp%2FSaintsHierarchy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TylerTemp%2FSaintsHierarchy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TylerTemp","download_url":"https://codeload.github.com/TylerTemp/SaintsHierarchy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TylerTemp%2FSaintsHierarchy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35053492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["unity","unity-editor","unity-hierarchy"],"created_at":"2026-01-25T08:16:50.021Z","updated_at":"2026-07-02T16:02:29.148Z","avatar_url":"https://github.com/TylerTemp.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Saints Hierarchy #\n\n[![unity_version](https://github.com/user-attachments/assets/dffbf530-6212-481b-bfdb-1e9d9ce3712d)](https://unity.com/download)\n[![openupm](https://img.shields.io/npm/v/today.comes.saintshierarchy?label=openupm\u0026registry_uri=https://package.openupm.com)](https://openupm.com/packages/today.comes.saintshierarchy/)\n[![openupm](https://img.shields.io/badge/dynamic/json?color=brightgreen\u0026label=downloads\u0026query=%24.downloads\u0026suffix=%2Fmonth\u0026url=https%3A%2F%2Fpackage.openupm.com%2Fdownloads%2Fpoint%2Flast-month%2Ftoday.comes.saintshierarchy)](https://openupm.com/packages/today.comes.saintshierarchy/)\n\nUnity Hierarchy enhancement. Use `Alt`+`Left Mouse Button` to select.\n\n![](https://github.com/user-attachments/assets/35037962-3488-426a-98ca-25c9dae696a0)\n\n## Features ##\n\n1.  Favorate GameObjects for quick access\n2.  Scene quick switcher\n3.  Draw indent guild\n4.  Allow set icons (pre-set \u0026 custom)\n5.  Auto set icons for camera, cavans, light, eventSystem \u0026 Wwise Initializer\n6.  Prefab footer icon if you have custom icon set\n\n## Install ##\n\n*   Using [OpenUPM](https://openupm.com/packages/today.comes.saintsfield/)\n\n    ```bash\n    openupm add today.comes.saintshierarchy\n    ```\n\n*   Using git upm:\n\n    add to `Packages/manifest.json` in your project\n\n    ```javascript\n    {\n        \"dependencies\": {\n            \"today.comes.saintshierarchy\": \"https://github.com/TylerTemp/SaintsHierarchy.git\",\n            // your other dependencies...\n        }\n    }\n    ```\n\n*   Using git upm (Unity UI):\n\n    1. `Window` - `Package Manager`\n    2. Click `+` button, `Add package from git URL`\n    3. Enter the following URL:\n\n    ```\n    https://github.com/TylerTemp/SaintsHierarchy.git\n    ```\n\n\n*   Using a `unitypackage`:\n\n    Go to the [Release Page](https://github.com/TylerTemp/SaintsHierarchy/releases) to download a desired version of `unitypackage` and import it to your project\n\n*   Using a git submodule:\n\n    ```bash\n    git submodule add https://github.com/TylerTemp/SaintsHierarchy.git Packages/today.comes.saintshierarchy\n    ```\n\n## Change Log ##\n\nFix: Delay injection when entering play mode to reduce unnecessary errors\n\nSee [the full change log](https://github.com/TylerTemp/SaintsHierarchy/blob/master/CHANGELOG.md)\n\n## Config ##\n\nThis will automaticlly add indent tree, and icon for camera, light, canvas, event system, wwise\n\n`Tools` - `Saints Hierarchy` - `Disable Saints Hierarchy` to disable this plugin\n\n![](https://github.com/user-attachments/assets/f9b3f079-0a7e-46c6-91b2-2ef83f9feff2)\n\n### Favorite GameObjects ###\n\nDrag \u0026 Drop GameObject from hierarchy to the top space to add it to favorite.\n\n*   Clicking the favorited button to quickly arrive the object in hierarchy\n*   Draging it to adjust the favorite items' order\n*   Right click (or `alt` + click) the favorite button to change alias, icon, color, or remove it from favorite\n\nYou can disable this feature in `Tools` - `Saints Hierarchy` - `Disable Favorites`\n\nBy default, clicking the favorite gameObject will only expand and highlight you to the target. If you want to inspect it when clicking, use `Tools` - `Saints Hierarchy` - `Favorite Click To Inspect`\n\nIt by default save favorite configs to personal config. If you're a one-person-army, you can use `Tools` - `Saints Hierarchy` - `Save Favorites To Project Config` so this config can be tracked by your version control like git. \n\n[![video](https://github.com/user-attachments/assets/06fa2daf-1ad4-4ad3-a61c-5bef0d30ebdf)](https://github.com/user-attachments/assets/6176d57b-4b84-46a4-8384-f231b339ebca)\n\n### Quick Scene Selector ###\n\nClicking on a scene's name to quickly switch to another scene in this project. It lists scenes with order:\n\n1.  Scene in build settings\n2.  Scene in Addressable\n3.  Scene in project\n\n(You can disable this function in `Tools` - `Saints Hierarchy` - `Disable Scene Selector`)\n\n[![video](https://github.com/user-attachments/assets/c0fad660-0b57-4ce1-8997-0e956446573e)](https://github.com/user-attachments/assets/be2d2704-fe91-4322-8dfb-c16688f9184d)\n\n### Background Strip ###\n\n`Tools` - `Saints Hierarchy` - `Background Strip`\n\n![](https://github.com/user-attachments/assets/a4c4cf02-7bc0-4161-9592-99a0f7d3bc44)\n\n### Component Icons ###\n\n`Tools` - `Saints Hierarchy` - `Component Icons`\n\nYou can set the script icon and show the icons at the end of row\n\nUse `Alt` + left click on a component icon to open that component's properties popup. You can also toggle `Behaviour.enabled` for Behaviour components.\n\nDisabled Behaviour component icons are dimmed.\n\nYou can also use `Tools` - `Saints Hierarchy` - `Component Icons For General Scripts` and `Tools` - `Saints Hierarchy` - `Component Icons For Transform` to control whether default script icons and Transform icons are shown.\n\nSetup:\n\n![](https://github.com/user-attachments/assets/81ab960d-1abd-425f-858c-b79344284088)\n\nResult:\n\n![](https://github.com/user-attachments/assets/423da9d8-1282-4d53-8ba9-d4bb4a83bdc6)\n\nAlt-Click popup inspector:\n\n![](https://github.com/user-attachments/assets/c6306227-d687-4dcb-bfcc-d6671b3a8e37)\n\n### GameObject Enabled Checker ###\n\n`Tools` - `Saints Hierarchy` - `GameObject Enabled Checker`\n\nAdd a checkbox at the end for gameObject which has any disabled parent gameObjects, to quickly toggle it back.\n\n![](https://github.com/user-attachments/assets/22cb4180-4aa6-4dcc-8cfc-6df0ee822e90)\n\n## Usage ##\n\n### GameObject Icon ###\n\nGameObject icon (including custom icons) will be used as hierarchy icon:\n\n![](https://github.com/user-attachments/assets/08563fd4-afd5-4185-ac07-9144db4b21d2)\n\nResult:\n\n![](https://github.com/user-attachments/assets/2753aa05-c782-41e2-a084-caafb8f51ad5)\n\nGameObject label will be used as hierarchy label underline:\n\n![](https://github.com/user-attachments/assets/80643e95-1b5c-48a5-a261-ed30a0646017)\n\nResult:\n\n![](https://github.com/user-attachments/assets/0c30c68e-6d50-4829-a10a-628b6dc85ea6)\n\n### Color ###\n\n1.  select a color to change\n2.  use `x` button to clean the color config\n3.  use the color picker (second button) to manually change the color you want\n\n![](https://github.com/user-attachments/assets/156b467c-b534-412f-9a79-cde1dca61ec2)\n\n### Custom Icon ###\n\n1.  select an icon to change\n2.  to use your custom icon, first right click on you icon - copy path, then paste it into the search field. The icon will appear as the first item on the result\n3.  select the same icon to remove icon config\n\n![](https://github.com/user-attachments/assets/25a0f472-8496-4087-9e0c-b75ef87be67b)\n\n### Scripted Icon ###\n\n```csharp\npublic class HierarchyIconPathExample : MonoBehaviour, IHierarchyIconPath\n{\n    public string HierarchyIconPath =\u003e \"CollabChanges Icon\";  // return a path or name of the icon\n}\n```\n\nOr\n\n```csharp\npublic class HierarchyIconTexture2DExample: MonoBehaviour, IHierarchyIconTexture2D\n{\n    public Texture2D texture2D;\n#if UNITY_EDITOR\n    public Texture2D HierarchyIconTexture2D =\u003e texture2D;  // return a texture2D object; null to use default behavor\n#endif\n}\n```\n\n![](https://github.com/user-attachments/assets/e62907fe-818e-4666-9b68-e724f2fbb387)\n\n### `HierarchyLabel`/`HierarchyLeftLabel` ###\n\nDraw label. Callback \u0026 tag supported.\n\nParameters:\n\n*   `string label = null`: label to draw. Use `\"$\" + name` to make a callback/property\n*   `string tooltip = null`: tooltip to show\n\n```csharp\nusing SaintsHierarchy;\n\n[HierarchyLabel(\"\u003ccolor=CadetBlue\u003e\u003cfield/\u003e\")]\n[HierarchyLeftLabel(\"\u003ccolor=CadetBlue\u003e|LEFT|\")]\npublic string content;\n```\n![](https://github.com/user-attachments/assets/375905ab-67b1-4e2f-a793-afd35a5f5087)\n\n### `HierarchyButton`/`HierarchyLeftButton`/`HierarchyGhostButton`/`HierarchyGhostLeftButton` ###\n\nDraw button. Callback \u0026 tag supported.\n\nParameters:\n\n*   `string label = null`: label of the button. `null` to use function name. use `\"$\" + name` to use a callback label\n*   `string tooltip = null`: tooltip to show\n\n```csharp\nusing SaintsHierarchy;\n\npublic string c;\n\n[HierarchyGhostButton(\"$\" + nameof(c), \"Click Me!\")]  // dynamic label\nprivate void OnBtnClick()\n{\n    Debug.Log($\"click {c}\");\n}\n\n[HierarchyLeftButton(\"C \u003ccolor=Burlywood\u003eLeft\")]\nprivate void LeftClick()\n{\n    Debug.Log(\"Left Click\");\n}\n```\n\n![](https://github.com/user-attachments/assets/78728c9f-e0f3-4e6d-afa5-7d167c97d7ed)\n\n### `HierarchyDraw`/`HierarchyLeftDraw` ###\n\nManually draw content\n\nParameters:\n\n*   `string groupBy = null`: group the items virtically by this name. If `null`, it will not share space with anyone.\n\nSignature:\n\nThe method must have this signaure:\n\n```csharp\nHierarchyUsed FuncName(HierarchyArea hierarchyArea)\n```\n\n`HierarchyArea` has the following fields:\n\n```csharp\n/// \u003csummary\u003e\n/// Rect.y for drawing\n/// \u003c/summary\u003e\npublic readonly float Y;\n/// \u003csummary\u003e\n/// Rect.height for drawing\n/// \u003c/summary\u003e\npublic readonly float Height;\n/// \u003csummary\u003e\n/// the x value where the title (gameObject name) started\n/// \u003c/summary\u003e\npublic readonly float TitleStartX;\n/// \u003csummary\u003e\n/// the x value where the title (gameObject name) ended\n/// \u003c/summary\u003e\npublic readonly float TitleEndX;\n/// \u003csummary\u003e\n/// the x value where the empty space start. You may want to start draw here\n/// \u003c/summary\u003e\npublic readonly float SpaceStartX;\n/// \u003csummary\u003e\n/// the x value where the empty space ends. When drawing from right, you need to backward drawing starts here\n/// \u003c/summary\u003e\npublic readonly float SpaceEndX;\n\n/// \u003csummary\u003e\n/// The x drawing position. It's recommend to use this as your start drawing point, as SaintsHierarchy will\n/// change this value accordingly everytime an item is drawn.\n/// \u003c/summary\u003e\npublic readonly float GroupStartX;\n/// \u003csummary\u003e\n/// When using `GroupBy`, you can see the vertical rect which already used by others in this group\n/// \u003c/summary\u003e\npublic readonly IReadOnlyList\u003cRect\u003e GroupUsedRect;\n\npublic float TitleWidth =\u003e TitleEndX - TitleStartX;\npublic float SpaceWidth =\u003e SpaceEndX - SpaceStartX;\n\n/// \u003csummary\u003e\n/// A quick way to make a rect\n/// \u003c/summary\u003e\n/// \u003cparam name=\"x\"\u003ewhere to start\u003c/param\u003e\n/// \u003cparam name=\"width\"\u003ewidth of the rect\u003c/param\u003e\n/// \u003creturns\u003erect space you want to draw\u003c/returns\u003e\npublic Rect MakeXWidthRect(float x, float width)\n{\n    if(width \u003e= 0)\n    {\n        return new Rect(x, Y, width, Height);\n    }\n    return new Rect(x + width, Y, -width, Height);\n}\n```\n\nAfter you draw your item, use `return new HierarchyUsed(useRect);` to tell the space you've used. Use `return default` if you don't draw this time.\n\n```csharp\npublic bool play;\n[Range(0f, 1f)] public float range1;\n[Range(0f, 1f)] public float range2;\n\nprivate string ButtonLabel =\u003e play ? \"Pause\" : \"Play\";\n\n#if UNITY_EDITOR\n[HierarchyLeftButton(\"$\" + nameof(ButtonLabel))]\nprivate IEnumerator LeftBtn()\n{\n    play = !play;\n    // ReSharper disable once InvertIf\n    if (play)\n    {\n        while (play)\n        {\n            range1 = (range1 + 0.0005f) % 1;\n            range2 = (range2 + 0.0009f) % 1;\n            EditorApplication.RepaintHierarchyWindow();\n            yield return null;\n        }\n    }\n}\n\n[HierarchyDraw(\"my progress bar\")]\nprivate HierarchyUsed DrawRight1G1(HierarchyArea headerArea)\n{\n    Rect useRect = new Rect(headerArea.MakeXWidthRect(headerArea.GroupStartX - 40, 40))\n    {\n        height = headerArea.Height / 2,\n    };\n    Rect progressRect = new Rect(useRect)\n    {\n        width = range1 * useRect.width,\n    };\n\n    EditorGUI.DrawRect(useRect, Color.gray);\n    EditorGUI.DrawRect(progressRect, Color.red);\n\n    return new HierarchyUsed(useRect);\n}\n[HierarchyDraw(\"my progress bar\")]\nprivate HierarchyUsed DrawRight1G2(HierarchyArea headerArea)\n{\n    Rect useRect = new Rect(headerArea.MakeXWidthRect(headerArea.GroupStartX - 40, 40))\n    {\n        y = headerArea.Y + headerArea.Height / 2,\n        height = headerArea.Height / 2,\n    };\n    Rect progressRect = new Rect(useRect)\n    {\n        width = range2 * useRect.width,\n    };\n\n    EditorGUI.DrawRect(useRect, Color.gray);\n    EditorGUI.DrawRect(progressRect, Color.yellow);\n\n    return new HierarchyUsed(useRect);\n}\n#endif\n```\n\n[![](https://github.com/user-attachments/assets/bd5db3ef-da03-4455-b665-1dc661901b15)](https://github.com/user-attachments/assets/260c9661-e7c2-4e0f-b666-a36287fe9eb4)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftylertemp%2Fsaintshierarchy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftylertemp%2Fsaintshierarchy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftylertemp%2Fsaintshierarchy/lists"}