版本:Unity 6 (6000.0)
语言英语
  • C#

DrawingScope

UnityEditor 中的结构

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。尽管我们无法接受所有提交的建议,但我们会阅读每个用户建议的更改,并在适用情况下进行更新。

关闭

提交失败

由于某种原因,您建议的更改无法提交。请在几分钟后再 尝试。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

说明

可自动设置和恢复 Handles.color 和/或 Handles.matrix 的一次性辅助结构。

这种结构允许您在代码块中临时设置 Handles.color 和/或 Handles.matrix 的值,并在退出范围时自动将它们恢复为其前一个值。

using UnityEditor;
using UnityEngine;

// a custom editor that draws a labeled circle around the selected MeshRenderer in the scene view [CustomEditor(typeof(MeshRenderer))] public class MeshRendererEditor : Editor { protected virtual void OnSceneGUI() { MeshRenderer meshRenderer = (MeshRenderer)target;

// get an orientation pointing from the selected object to the camera Vector3 cameraToTarget = Camera.current.transform.position - meshRenderer.transform.position; Quaternion billboardOrientation = Quaternion.LookRotation(cameraToTarget, Camera.current.transform.up);

// set the handle matrix to the target's position, oriented facing the camera Matrix4x4 matrix = Matrix4x4.TRS(meshRenderer.transform.position, billboardOrientation, Vector3.one); using (new Handles.DrawingScope(Color.magenta, matrix)) { // draw a magenta circle around the selected object with a label at the top Vector3 size = meshRenderer.bounds.size; float radius = Mathf.Max(size.x, size.y, size.z); Handles.DrawWireArc(Vector3.zero, Vector3.forward, Vector3.right, 360f, radius); Handles.Label(Vector3.up * radius, meshRenderer.name); } } }

属性

originalColor创建此 DrawingScope 时的 Handles.color 值。
originalMatrix创建此 DrawingScope 时的 Handles.matrix 值。

构造函数

Handles.DrawingScope创建新的 DrawingScope 并将 Handles.color 和/或 Handles.matrix 设置为指定的值。

公用方法

Dispose在退出作用域时,自动将 Handles.color 和 Handles.matrix 恢复为进入作用域之前的相应值。您无需手动调用此方法。