场景视图中的自定义 3D GUI 控件和绘制操作。
手柄是 Unity 用于操作场景视图中的项的 3D 控件。内置的 Handle GUI 有很多,如通过变换组件定位、缩放和旋转对象的熟悉的工具。不过,您也可以自行定义 Handle GUI,以与自定义组件编辑器结合使用。此类 GUI 对于编辑以程序方式生成的场景内容、“不可见”项和相关对象的组(如路径点和位置标记)非常实用。
您还可以使用覆盖在场景视图上的 2D 按钮和其他控件来补充场景中的 3D 手柄 GUI。这是通过将标准 Unity GUI 调用封装在 Editor.OnSceneGUI 函数中的 Handles.BeginGUI 和 Handles.EndGUI 对中完成的。可以使用 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 | 手柄的颜色。 |
inverseMatrix | 所有手柄操作的矩阵的逆矩阵。 |
lighting | 手柄是否亮起? |
lineThickness | Retrieves the user preference setting that controls the thickness of tool handle lines. (Read Only) |
matrix | 所有手柄操作的矩阵。 |
preselectionColor | 用于突出显示鼠标指针下当前未选中的手柄的颜色。 |
secondaryColor | 用于一般物体的柔和色。 |
selectedColor | 用于当前处于活动状态的手柄的颜色。 |
xAxisColor | 用于操纵某物体 X 坐标的手柄的颜色。 |
yAxisColor | 用于操纵某物体 Y 坐标的手柄的颜色。 |
zAxisColor | 用于操纵某物体 Z 坐标的手柄的颜色。 |
zTest | 手柄的 zTest。 |
currentCamera | 为当前摄像机设置视口和相关内容。 |
ArrowHandleCap | 绘制一个类似于移动工具所用箭头的箭头。 |
BeginGUI | 在 3D 手柄 GUI 内开始一个 2D GUI 块。 |
Button | 创建一个 3D 按钮。 |
CircleHandleCap | 绘制一个圆形手柄。将此手柄传递给 handle 函数。 |
ClearCamera | 清除摄像机。 |
ConeHandleCap | 绘制一个锥体手柄。将此手柄传递给 handle 函数。 |
CubeHandleCap | 绘制一个立方体手柄。将此手柄传递给 handle 函数。 |
CylinderHandleCap | 绘制一个圆柱体手柄。将此手柄传递给 handle 函数。 |
Disc | 创建一个可使用鼠标拖动的 3D 圆盘。 |
DotHandleCap | 绘制一个圆点手柄。将此手柄传递给 handle 函数。 |
DrawAAConvexPolygon | 绘制使用点数组指定的抗锯齿凸多边形。 |
DrawAAPolyLine | 绘制使用点数组和宽度指定的抗锯齿线。 |
DrawBezier | 绘制通过给定切线的起点和终点的纹理化贝塞尔曲线。 |
DrawCamera | 在矩形内绘制一个摄像机。 |
DrawDottedLine | 绘制一条从 p1 到 p2 的虚线。 |
DrawDottedLines | 绘制一系列虚线段。 |
DrawGizmos | 为给定摄像机绘制 Gizmos 的子集(在后处理之前或之后)。 |
DrawLine | Draws a line from p1 to p2. |
DrawLines | 绘制一系列线段。 |
DrawPolyLine | 绘制一条穿过 points 列表的线。 |
DrawSelectionFrame | 绘制一个面向选择框的摄像机。 |
DrawSolidArc | 在 3D 空间中绘制一个圆扇形(饼图)。 |
DrawSolidDisc | 在 3D 空间中绘制一个实心平面圆盘。 |
DrawSolidRectangleWithOutline | 在 3D 空间中绘制一个实心轮廓矩形。 |
DrawTexture3DSDF | Draws a 3D texture using Signed Distance Field rendering mode in 3D space. |
DrawTexture3DSlice | Draws a 3D texture using Slice rendering mode in 3D space. |
DrawTexture3DVolume | Draws a 3D texture using Volume rendering mode in 3D space. |
DrawWireArc | Draws a circular arc in 3D space. |
DrawWireCube | 使用 center 和 size 绘制一个线框盒体。 |
DrawWireDisc | Draws the outline of a flat disc in 3D space. |
EndGUI | 结束一个 2D GUI 块并返回到 3D 手柄 GUI。 |
FreeMoveHandle | 创建一个不受约束的移动手柄。 |
FreeRotateHandle | 创建一个不受约束的旋转手柄。 |
GetMainGameViewSize | 获取主游戏视图的宽度和高度。 |
Label | 在 3D 空间中创建一个文本标签。 |
MakeBezierPoints | 返回表示贝塞尔曲线的点数组。 |
PositionHandle | 创建一个位置手柄。 |
RadiusHandle | 创建一个场景视图半径手柄。 |
RectangleHandleCap | 绘制一个矩形手柄。将此手柄传递给 handle 函数。 |
RotationHandle | 创建一个场景视图旋转手柄。 |
ScaleHandle | 创建一个场景视图缩放手柄。 |
ScaleSlider | 创建一个定向缩放滑动条。 |
ScaleValueHandle | 创建一个缩放单个浮点的 3D 手柄。 |
SetCamera | 设置当前摄像机,以便所有手柄和辅助图标均使用相应设置进行绘制。 |
ShouldRenderGizmos | 确定是否绘制 Gizmos。 |
Slider | 创建一个沿着一个轴移动的 3D 滑动条。 |
Slider2D | 创建一个沿两个轴定义的平面移动的 3D 滑动条。 |
SnapToGrid | 将每个 Transform.position 四舍五入到 EditorSnap.move 的最接近倍数。 |
SnapValue | 如果对齐为 active,则将 value 四舍五入到 snap 的最接近倍数。注意,snap 只能为正数。 |
SphereHandleCap | 绘制一个球体手柄。将此手柄传递给 handle 函数。 |
TransformHandle | 创建变换手柄。 |
CapFunction | 用于绘制手柄的函数,如 Handles.RectangleCap。 |
SizeFunction | 用于根据手柄的当前位置获取手柄大小的委托类型。 |