public void DrawHandle ();

描述

使用实例的当前配置在当前手柄摄像机中显示此实例的函数。

在调用此函数之前始终将属性写入手柄。在 EditorGUI.BeginChangeCheckEditorGUI.EndChangeCheck 中调用此函数,以检测用户交互并从手柄中读取更新后的属性。\ \ 以下组件定义了具有 Bounds 属性的对象。

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

借助以下自定义编辑器,用户可以在 Scene View 中编辑此组件的边界属性。

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