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; } } }