controlID | 句柄的控制 ID。 |
position | 在 Handles.matrix 空间中句柄的位置。 |
rotation | 在 Handles.matrix 空间中句柄的旋转。 |
size | 在 Handles.matrix 空间中句柄的大小。如果你希望常态屏幕空间大小,请使用 HandleUtility.GetHandleSize。 |
eventType | 句柄要操作的事件类型。设计上它处理 EventType.Layout 和 EventType.Repaint 事件。 |
绘制一个矩形句柄。将它传递给句柄函数。
在 EventType.Layout 事件上,计算句柄到鼠标的距离并相应调用 HandleUtility.AddControl。
在 EventType.Repaint 事件上,绘制句柄形状。
场景视图中的矩形句柄上限。
将以下脚本作为 RectangleExample.cs 添加到 Assets 文件夹,并将 RectangleExample 组件添加到场景中的对象。
using UnityEngine;
public class RectangleExample : MonoBehaviour {}
将以下脚本作为 RectangleExampleEditor.cs 添加到 Assets/Editor,然后选择具有 RectangleExample 组件的对象。
using UnityEditor; using UnityEngine;
[CustomEditor(typeof(RectangleExample))] public class RectangleExampleEditor : Editor { float size = 1f;
protected virtual void OnSceneGUI() { if (Event.current.type == EventType.Repaint) { Transform transform = ((RectangleExample)target).transform; Handles.color = Handles.xAxisColor; Handles.RectangleHandleCap( 0, transform.position + new Vector3(3f, 0f, 0f), transform.rotation * Quaternion.LookRotation(Vector3.right), size, EventType.Repaint ); Handles.color = Handles.yAxisColor; Handles.RectangleHandleCap( 0, transform.position + new Vector3(0f, 3f, 0f), transform.rotation * Quaternion.LookRotation(Vector3.up), size, EventType.Repaint ); Handles.color = Handles.zAxisColor; Handles.RectangleHandleCap( 0, transform.position + new Vector3(0f, 0f, 3f), transform.rotation * Quaternion.LookRotation(Vector3.forward), size, EventType.Repaint ); } } }