Описание
Обработчик сообщения, отправляемого при изменении объекта или группы объектов в иерархии.
Действия, вызывающие появление этого сообщения, включают создание, переименование, переназначение или уничтожение объектов в текущей иерархии, а также загрузку, выгрузку, переименование или изменение порядка загруженных сцен. Обратите внимание, что сообщение отправляется не сразу в ответ на эти действия, а во время следующего обновления приложения-редактора.
Действия, предпринятые с объектами, для которых установлено значение HideFlags.HideInHierarchy, не приведут к отправке этого сообщения, но изменят объект. hideFlags будет.
В редактор Unity добавляется OnHierarchyChange(). После установки объекты - это часы в сцене и инспекторе. Добавление нового игрового объекта в сцену или изменение положения игрового объекта в инспекторе будет наблюдаться функцией OnHierarchyChange(). Аналогичным образом будут видны изменения поворота и масштаба.
Смотрите так же: EditorApplication.hierarchyChange
В следующем примере скрипта создается EditorWindow, который отслеживает количество объектов и обновляется при каждом изменении иерархии. Скопируйте его в файл HierarchyMonitorWindow.cs и поместите в папку Editor.
using System.Linq;
using UnityEditor;
using UnityEngine;
class HierarchyMonitorWindow : EditorWindow
{
[MenuItem("Window/Hierarchy Monitor")]
static void CreateWindow()
{
EditorWindow.GetWindow();
}
[SerializeField]
int m_NumberVisible;
void OnEnable()
{
titleContent.text = "Hierarchy Monitor";
// manually call the event handler when the window is first loaded so its contents are up-to-date
OnHierarchyChange();
}
void OnHierarchyChange()
{
var all = Resources.FindObjectsOfTypeAll(typeof(GameObject));
m_NumberVisible =
all.Where(obj => (obj.hideFlags & HideFlags.HideInHierarchy) != HideFlags.HideInHierarchy).Count();
}
void OnGUI()
{
EditorGUILayout.LabelField(
string.Format("There are currently {0} GameObjects visible in the hierarchy.", m_NumberVisible)
);
}
}
Еще один простой пример.
// При изменении иерархии
//
// Просмотр Иерархия и доступ к инспектору. Когда игровые объекты изменены или новые
// при добавлении или удалении будет вызываться этот пример.
using UnityEngine;
using UnityEditor;
public class ExampleClass : EditorWindow
{
static int count = 0;
[MenuItem("Example/OnHierarchyChange Example")]
static void Init()
{
ExampleClass window = (ExampleClass)GetWindow(typeof(ExampleClass));
window.Show();
}
void OnHierarchyChange()
{
count += 1;
this.Repaint();
}
void OnGUI()
{
GUI.Label(new Rect(5, 5, 205, 35), "OnHierarchyChange: " + count.ToString());
}
}