Files
BABA_YAGA/Assets/Editors/HierarchyEnhancer.cs
2026-06-09 02:05:00 +07:00

81 lines
3.2 KiB
C#

// // ===============================================================================
// // HierarchyEnhancer - Quick Toggle for GameObjects
// //
// // Creator: Scove
// // Last Updated: 2024-05-08
// // Version: 2.0
// //
// // Purpose:
// // Adds a handy toggle checkbox to the right side of every item in the Hierarchy.
// // This allows you to enable or disable GameObjects instantly without selecting them.
// //
// // Key Features:
// // 1. One-click activation/deactivation directly in Hierarchy.
// // 2. Full Undo/Redo support integrated with Unity's system.
// // 3. Optimized UI placement to avoid overlapping with object names.
// // 4. Visual clarity: Helps quickly identify inactive objects in a complex tree.
// //
// // How to Use:
// // 1. Place this script in an 'Editor' folder.
// // 2. Look at your Hierarchy window; a small checkbox will appear on the far right.
// // 3. Click the checkbox to toggle the Active/Inactive state of any GameObject.
// // ===============================================================================
//
// using UnityEditor;
// using UnityEngine;
//
// namespace Editor
// {
// [InitializeOnLoad]
// public class HierarchyEnhancer
// {
// // Define the width of the toggle area
// private const float TOGGLE_WIDTH = 16f;
//
// static HierarchyEnhancer()
// {
// // Subscribe to the hierarchy item GUI event
// EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyItemGUI;
// }
//
// private static void OnHierarchyItemGUI(int instanceID, Rect selectionRect)
// {
// // Get the GameObject associated with this instance ID
// GameObject obj = EditorUtility.EntityIdToObject(instanceID) as GameObject;
// if (obj == null) return;
//
// // Calculate the position for the Toggle (Aligned to the far right)
// // selectionRect.xMax gives us the right boundary of the Hierarchy row
// Rect toggleRect = new Rect(selectionRect);
// toggleRect.x = selectionRect.xMax - TOGGLE_WIDTH;
// toggleRect.width = TOGGLE_WIDTH;
//
// // Check current active state
// bool isActive = obj.activeSelf;
//
// // Handle UI and changes
// EditorGUI.BeginChangeCheck();
//
// // Set the color based on active state (Optional polish)
// Color originalColor = GUI.color;
// if (!isActive) GUI.color = new Color(1f, 1f, 1f, 0.5f); // Dim the toggle if inactive
//
// bool newActive = EditorGUI.Toggle(toggleRect, isActive);
//
// GUI.color = originalColor; // Restore original color for other elements
//
// if (EditorGUI.EndChangeCheck())
// {
// // Record undo before applying the change
// Undo.RecordObject(obj, "Toggle GameObject Active State");
// obj.SetActive(newActive);
//
// // If it's a Prefab, mark the scene as dirty to ensure it saves
// if (!Application.isPlaying)
// {
// EditorUtility.SetDirty(obj);
// }
// }
// }
// }
// }