EditorApplication.RepaintHierarchyWindow
Declaration
public static void RepaintHierarchyWindow();Описание
Может использоваться для обеспечения перекраски HierarchyWindow.
Используйте EditorApplication.RepaintHierarchyWindow для обновления окна Hierarchy, когда изменения в GameObjects, такие как имена, значки или метки, не отражаются автоматически в окне Hierarchy. EditorApplication.RepaintHierarchyWindow могут быть полезны, когда они используются с пользовательскими инструментами Редактора или расширениями, которые динамически изменяют свойства GameObject. Избегайте частых вызовов в контексте, критическом для производительности, поскольку EditorApplication.RepaintHierarchyWindow могут негативно повлиять на производительность Редактора. Этот метод должен использоваться в Unity Editor и требует пространства имен UnityEditor. Обычно его объединяют с EditorApplication.hierarchyChanged или пользовательскими событиями для обеспечения последовательности UI. Неприменимо во время выполнения, поскольку это только редактор. Дополнительные ресурсы: HierarchyWindowItemCallback, EditorApplication.hierarchyWindowItemOnGUI.
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
public class CustomHierarchyStyling
{
static CustomHierarchyStyling()
{
// Register a callback to draw custom icons in the Hierarchy.
EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;
// Repaint the Hierarchy window when the tag changes to reflect icon updates
EditorApplication.hierarchyChanged += () => EditorApplication.RepaintHierarchyWindow();
}
static void OnHierarchyGUI(int instanceID, Rect selectionRect)
{
GameObject obj = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
//Add a tag named "Special" to the GameObject to display the custom icon
if (obj != null && obj.CompareTag("Special"))
{
// Draw a custom icon on the left side of the GameObject in the Hierarchy
Rect iconRect = new Rect(selectionRect.x - 20, selectionRect.y, 18, 18);
GUI.Label(iconRect, EditorGUIUtility.IconContent("d_Favorite"));
}
}
}