Описание
OnInspectorUpdate вызывается со скоростью 10 кадров в секунду, чтобы дать инспектору возможность обновиться.

using UnityEditor;
using UnityEngine;
using System.Collections;
// Простой скрипт, который выравнивает положение нескольких выбранных GameObjects
// с первым выбранным.
public class Example : EditorWindow
{
bool alignToX = true;
bool alignToY = true;
bool alignToZ = true;
string selected = "";
string alignTo = "";
[MenuItem("Example/OnInspectorUpdate example")]
static void Init()
{
Example window = (Example)GetWindow(typeof(Example));
window.Show();
}
void OnInspectorUpdate()
{
// Вызов Repaint для OnInspectorUpdate, когда он перекрашивает окна
// меньше раз, как если бы это было OnGUI/Update
Repaint();
}
void OnGUI()
{
GUILayout.Label("Select various Objects in the Hierarchy view");
selected = Selection.activeTransform ? Selection.activeTransform.name : "";
foreach (Transform t in Selection.transforms)
{
if (t.GetInstanceID() != Selection.activeTransform.GetInstanceID())
{
alignTo += t.name + " ";
}
}
EditorGUILayout.LabelField("Align: ", alignTo);
alignTo = "";
EditorGUILayout.LabelField("With: ", selected);
alignToX = EditorGUILayout.Toggle("X", alignToX);
alignToY = EditorGUILayout.Toggle("Y", alignToY);
alignToZ = EditorGUILayout.Toggle("Z", alignToZ);
if (GUILayout.Button("Align"))
{
Align();
}
}
void Align()
{
if (selected == "" || alignTo == "")
{
Debug.LogError("No objects selected to align");
}
foreach (Transform t in Selection.transforms)
{
Vector3 alignementPosition = Selection.activeTransform.position;
Vector3 newPosition;
newPosition.x = alignToX ? alignementPosition.x : t.position.x;
newPosition.y = alignToY ? alignementPosition.y : t.position.y;
newPosition.z = alignToZ ? alignementPosition.z : t.position.z;
t.position = newPosition;
}
}
}