controlID | 控制手柄的 ID。 |
position | 手柄在 Handles.matrix 空间中的位置。 |
rotation | 手柄在 Handles.matrix 空间中的旋转。 |
eventType | 手柄进行操作的事件类型。根据设计,它处理 EventType.Layout 和 EventType.Repaint 事件。 |
size | 手柄在 Handles.matrix 空间中的大小。如果您希望有固定的屏幕空间大小,请使用 HandleUtility.GetHandleSize。 |
绘制一个球形手柄。将其传递到 handle 函数中。
在 EventType.Layout 事件中,计算手柄离鼠标的距离,并相应调用 HandleUtility.AddControl。
在 EventType.Repaint 事件中,绘制手柄形状。
场景视图中的球形手柄上限。
将以下脚本添加到您的“资产”文件夹中,作为 SphereExample.cs,并将 SphereExample 组件添加到一个场景中的对象。
using UnityEngine;
public class SphereExample : MonoBehaviour {}
将以下脚本添加到“资产/编辑器”中的 SphereExampleEditor.cs,并选择包含 SphereExample 组件的对象。
using UnityEditor; using UnityEngine;
[CustomEditor(typeof(SphereExample))] public class SphereExampleEditor : Editor { float size = 1f;
protected virtual void OnSceneGUI() { if (Event.current.type == EventType.Repaint) { Transform transform = ((SphereExample)target).transform; Handles.color = Handles.xAxisColor; Handles.SphereHandleCap( 0, transform.position + new Vector3(3f, 0f, 0f), transform.rotation * Quaternion.LookRotation(Vector3.right), size, EventType.Repaint ); Handles.color = Handles.yAxisColor; Handles.SphereHandleCap( 0, transform.position + new Vector3(0f, 3f, 0f), transform.rotation * Quaternion.LookRotation(Vector3.up), size, EventType.Repaint ); Handles.color = Handles.zAxisColor; Handles.SphereHandleCap( 0, transform.position + new Vector3(0f, 0f, 3f), transform.rotation * Quaternion.LookRotation(Vector3.forward), size, EventType.Repaint ); } } }