用于在当前句柄摄像机中使用其当前配置显示此实例的函数。
始终在调用此函数之前将属性写入句柄。将对该函数的调用置于 EditorGUI.BeginChangeCheck 和 EditorGUI.EndChangeCheck 内,以检测用户交互并从句柄读取更新后的属性。
以下组件定义具有 边界 属性的对象。
using UnityEngine;
public class BoundsExample : MonoBehaviour { public Bounds bounds { get { return m_Bounds; } set { m_Bounds = value; } } [SerializeField] private Bounds m_Bounds = new Bounds(Vector3.zero, Vector3.one); }
以下自定义编辑器允许用户在场景视图中编辑此组件的边界属性。
using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine;
[CustomEditor(typeof(BoundsExample)), CanEditMultipleObjects] public class BoundsExampleEditor : Editor { private BoxBoundsHandle m_BoundsHandle = new BoxBoundsHandle();
// the OnSceneGUI callback uses the Scene view camera for drawing handles by default protected virtual void OnSceneGUI() { BoundsExample boundsExample = (BoundsExample)target;
// copy the target object's data to the handle m_BoundsHandle.center = boundsExample.bounds.center; m_BoundsHandle.size = boundsExample.bounds.size;
// draw the handle EditorGUI.BeginChangeCheck(); m_BoundsHandle.DrawHandle(); if (EditorGUI.EndChangeCheck()) { // record the target object before setting new values so changes can be undone/redone Undo.RecordObject(boundsExample, "Change Bounds");
// copy the handle's updated data back to the target object Bounds newBounds = new Bounds(); newBounds.center = m_BoundsHandle.center; newBounds.size = m_BoundsHandle.size; boundsExample.bounds = newBounds; } } }