update
This commit is contained in:
@@ -1,81 +1,81 @@
|
||||
// ===============================================================================
|
||||
// HierarchyEnhancer - Quick Toggle for GameObjects
|
||||
// // ===============================================================================
|
||||
// // 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.
|
||||
// // ===============================================================================
|
||||
//
|
||||
// Creator: Scove
|
||||
// Last Updated: 2024-05-08
|
||||
// Version: 2.0
|
||||
// using UnityEditor;
|
||||
// using UnityEngine;
|
||||
//
|
||||
// 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.
|
||||
// namespace Editor
|
||||
// {
|
||||
// [InitializeOnLoad]
|
||||
// public class HierarchyEnhancer
|
||||
// {
|
||||
// // Define the width of the toggle area
|
||||
// private const float TOGGLE_WIDTH = 16f;
|
||||
//
|
||||
// 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.
|
||||
// static HierarchyEnhancer()
|
||||
// {
|
||||
// // Subscribe to the hierarchy item GUI event
|
||||
// EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyItemGUI;
|
||||
// }
|
||||
//
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
Reference in New Issue
Block a user