OnInspectorUpdate 以每秒 10 帧的速度调用,以便检视面板有机会进行更新。
Align position of the selected objects.
// Simple script that aligns the position of several selected GameObjects
// with the first selected one.
class AlignPosition extends EditorWindow {
var alignToX = true;var alignToY = true; var alignToZ = true;
var selected = "";
var alignTo = "";
@MenuItem("Example/Align position")
static function Init() {
var window = GetWindow(AlignPosition);
window.Show();
}
function OnInspectorUpdate() {
// Call Repaint on OnInspectorUpdate as it repaints the windows
// less times as if it was OnGUI/Update
Repaint();
}
function OnGUI() {
GUILayout.Label("Select various Objects in the Hierarchy view");
selected = Selection.activeTransform ? Selection.activeTransform.name : "";
for(var t : Transform 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();
}
function Align() {
if(selected == "" || alignTo == "")
Debug.LogError("No objects selected to align");
for(var t : Transform in Selection.transforms) {
var alignementPosition = Selection.activeTransform.position;
var newPosition : Vector3;
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;
}
}
}