position | Handles.matrix 空间中当前点的坐标。 |
direction | Handles.matrix 空间中滑块的轴线方向。 |
size | Handles.matrix 空间中控制柄的大小。如果您希望设定一个恒定的屏幕空间大小,请使用 HandleUtility.GetHandleSize。 |
snap | 对齐增量。请参阅 Handles.SnapValue。 |
capFunction | 进行实际绘制时要调用的函数。默认情况下为 Handles.ArrowHandleCap,但可以采用具有相同签名的任意函数。 |
Vector3 用户与控制柄互动的修改过的值。如果用户没有移动控制柄,它将返回传递到该函数中的位置值。
制作沿一个轴线移动的 3D 滑块。
该方法将在界面上绘制可 3D 拖动的控制柄。控制柄被限制在 3D 空间中的方向向量上滑动。
场景视图中的滑块控制柄。
将以下脚本以 SliderExample.cs 的名称添加至 Assets 文件夹,并将 SliderExample 组件添加到场景中的某一物体。
using UnityEngine;
[ExecuteInEditMode] public class SliderExample : MonoBehaviour { public Vector3 targetPosition { get { return m_TargetPosition; } set { m_TargetPosition = value; } } [SerializeField] private Vector3 m_TargetPosition = new Vector3(1f, 0f, 2f);
public virtual void Update() { transform.LookAt(m_TargetPosition); } }
将以下脚本以 SliderExampleEditor.cs 的名称添加至 Assets/Editor,然后选择包含 SliderExample 组件的物体。
using UnityEditor; using UnityEngine;
[CustomEditor(typeof(SliderExample)), CanEditMultipleObjects] public class SliderExampleEditor : Editor { protected virtual void OnSceneGUI() { SliderExample example = (SliderExample)target;
float size = HandleUtility.GetHandleSize(example.targetPosition) * 0.5f; float snap = 0.1f;
EditorGUI.BeginChangeCheck(); Vector3 newTargetPosition = Handles.Slider(example.targetPosition, Vector3.right, size, Handles.ConeHandleCap, snap); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(example, "Change Look At Target Position"); example.targetPosition = newTargetPosition; example.Update(); } } }