版本:Unity 6 (6000.0)
语言简体中文
  • C#

PrimitiveBoundsHandle.DrawHandle

提出修改建议

成功!

感谢你帮助我们提高 Unity 文档的质量。尽管我们无法接受所有投稿,但我们会阅读用户提出的每项修改建议,并在必要时进行更新。

关闭

提交失败

由于某种原因,你的修改建议无法提交。请在几分钟后,<a>重试</a>。感谢你花时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public void DrawHandle();

描述

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

始终在调用此函数之前将属性写入句柄。将对该函数的调用置于 EditorGUI.BeginChangeCheckEditorGUI.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; } } }

其他资源:Editor.OnSceneGUIHandles.SetCamera