场景视图中的自定义 3D GUI 控件和绘制。
Handles 是 Unity 用于在场景视图中操作项目的 3D 控件。有许多内置的 Handle GUI,例如熟悉的用于通过 Transform 组件定位、缩放和旋转对象的工具。但是,也可以定义自己的 Handle GUI 以与自定义组件编辑器一起使用。此类 GUI 可以成为编辑程序生成场景内容、“不可见”项目和相关对象组(例如路点和位置标记)的非常有用的方法。
您还可以使用叠加在场景视图上的 2D 按钮和其他控件来补充场景中的 3D Handle GUI。这是通过在 Handles.BeginGUI 和 Handles.EndGUI 对内包含标准 Unity GUI 调用来完成的,这些调用位于 Editor.OnSceneGUI 函数中。您可以使用 HandleUtility.GUIPointToWorldRay 和 HandleUtility.WorldToGUIPoint 在 2D GUI 和 3D 世界坐标之间转换坐标。
using UnityEngine; using UnityEditor; public class ExampleScript : MonoBehaviour { public float value = 7.0f; }
// A tiny custom editor for ExampleScript component [CustomEditor(typeof(ExampleScript))] public class ExampleEditor : Editor { // Custom in-scene UI for when ExampleScript // component is selected. public void OnSceneGUI() { var t = target as ExampleScript; var tr = t.transform; var pos = tr.position; // display an orange disc where the object is var color = new Color(1, 0.8f, 0.4f, 1); Handles.color = color; Handles.DrawWireDisc(pos, tr.up, 1.0f); // display object "value" in scene GUI.color = color; Handles.Label(pos, t.value.ToString("F1")); } }
.
centerColor | 用于表示某物中心的句柄的颜色。 |
color | 设置句柄的颜色。颜色是持久状态,会影响设置后绘制的任何句柄。使用 DrawingScope 为一组句柄设置颜色,而不会影响其他句柄的颜色。 |
elementColor | 编辑模式下对象的默认颜色。 |
elementPreselectionColor | 在自定义编辑模式下,用于突出显示鼠标指针下当前未选中的对象的颜色。 |
elementSelectionColor | 编辑模式下所选对象的颜色。 |
inverseMatrix | 所有句柄操作的矩阵的逆矩阵。 |
lighting | 句柄是否被照亮? |
lineThickness | 检索控制工具句柄线粗细的用户首选项设置。(只读) |
matrix | 所有句柄操作的矩阵。HandleUtility 和 Handles 中的函数使用此矩阵来转换控件。 |
preselectionColor | 用于突出显示鼠标指针下当前未选中的句柄的颜色。 |
secondaryColor | 用于一般事物的柔和颜色。 |
selectedColor | 用于当前活动句柄的颜色。 |
UIColliderHandleColor | Unity UI 的填充可视化的颜色。 |
xAxisColor | 用于操作某物 X 坐标的句柄的颜色。 |
yAxisColor | 用于操作某物 Y 坐标的句柄的颜色。 |
zAxisColor | 用于操作某物 Z 坐标的句柄的颜色。 |
zTest | 句柄的 zTest。 |
currentCamera | 获取或设置当前正在渲染的摄像机。 |
ArrowHandleCap | 绘制类似于移动工具使用的箭头。 |
BeginGUI | 在 3D 句柄 GUI 内开始一个 2D GUI 块。 |
Button | 创建一个 3D 按钮。 |
CircleHandleCap | 绘制一个圆形句柄。将其传递给句柄函数。 |
ClearCamera | 清除摄像机。 |
ConeHandleCap | 绘制一个圆锥形句柄。将其传递给句柄函数。 |
CubeHandleCap | 绘制一个立方体句柄。将其传递给句柄函数。 |
CylinderHandleCap | 绘制一个圆柱体句柄。将其传递给句柄函数。 |
Disc | 创建一个可以使用鼠标拖动的 3D 圆盘。 |
DotHandleCap | 绘制一个点句柄。将其传递给句柄函数。 |
DrawAAConvexPolygon | 使用点数组绘制抗锯齿凸多边形。 |
DrawAAPolyLine | 使用点数组和宽度绘制抗锯齿线。 |
DrawBezier | 通过具有给定切线的起点和终点绘制纹理贝塞尔曲线。 |
DrawCamera | 在矩形内绘制摄像机。 |
DrawDottedLine | 从 p1 到 p2 绘制一条虚线。 |
DrawDottedLines | 绘制虚线段列表。 |
DrawGizmos | 为指定的摄像机绘制 Gizmos。 |
DrawLine | 从 p1 到 p2 绘制一条线。 |
DrawLines | 绘制线段列表。 |
DrawOutline | 在场景视图中围绕指定的 GameObject 绘制轮廓。 |
DrawPolyLine | 绘制穿过点列表的线。 |
DrawSelectionFrame | 在指定位置和旋转处创建具有指定大小的正方形。 |
DrawSolidArc | 在 3D 空间中绘制一个圆形扇形(扇形)。 |
DrawSolidDisc | 在 3D 空间中绘制一个实心扁平圆盘。 |
DrawSolidRectangleWithOutline | 在 3D 空间中绘制一个实心带轮廓的矩形。 |
DrawTexture3DSDF | 在 3D 空间中使用有符号距离场渲染模式绘制 3D 纹理。 |
DrawTexture3DSlice | 在 3D 空间中使用切片渲染模式绘制 3D 纹理。 |
DrawTexture3DVolume | 在 3D 空间中使用体积渲染模式绘制 3D 纹理。 |
DrawWireArc | 在 3D 空间中绘制一个圆弧。 |
DrawWireCube | 绘制一个带有中心和大小的线框框。 |
DrawWireDisc | 在 3D 空间中绘制扁平圆盘的轮廓。 |
EndGUI | 结束一个 2D GUI 块并返回到 3D 句柄 GUI。 |
FreeMoveHandle | 创建一个不受约束的移动句柄。 |
FreeRotateHandle | 创建一个不受约束的旋转句柄。 |
GetMainGameViewSize | 获取主游戏视图的宽度和高度。 |
Label | 为在 3D 空间中定位的句柄创建文本标签。 |
MakeBezierPoints | 返回一个表示贝塞尔曲线的点数组。 |
PositionHandle | 创建一个位置句柄。 |
RadiusHandle | 创建一个场景视图半径句柄。 |
RectangleHandleCap | 绘制一个矩形句柄。将其传递给句柄函数。 |
RotationHandle | 创建一个场景视图旋转句柄。 |
ScaleHandle | 创建一个场景视图缩放句柄。 |
ScaleSlider | 创建一个方向缩放滑块。 |
ScaleValueHandle | 创建一个缩放单个浮点数的 3D 句柄。 |
SetCamera | 设置当前摄像机,以便所有 Handles 和 Gizmos 都使用其设置进行绘制。 |
ShouldRenderGizmos | 确定是否绘制 Gizmos。 |
Slider | 创建一个沿一个轴移动的 3D 滑块。 |
Slider2D | 创建一个沿由两个轴定义的平面移动的 3D 滑块。 |
SnapToGrid | 将每个 Transform.position 或 Vector3 四舍五入到 EditorSnapSettings.gridSize 的最近倍数。 |
SnapValue | 如果启用了捕捉,则将值四舍五入到捕捉的最近倍数。请注意,捕捉只能为正数。 |
SphereHandleCap | 绘制一个球体句柄。将其传递给句柄函数。 |
TransformHandle | 创建一个变换句柄。 |
CapFunction | 用于绘制句柄的函数,例如 Handles.RectangleCap。 |
SizeFunction | 用于根据句柄的当前位置获取句柄大小的委托类型。 |