scale | 用户可以修改的值。 |
position | Handles.matrix 空间中手柄的位置。 |
direction | Handles.matrix 空间中手柄的方向。 |
rotation | Handles.matrix 空间中手柄的旋转。 |
size | Handles.matrix 空间中手柄的大小。如果您想要一个恒定的屏幕空间大小,请使用 HandleUtility.GetHandleSize。 |
snap | 贴靠增量。请参阅 Handles.SnapValue。 |
float 通过用户与手柄的交互修改的新值。如果用户没有移动手柄,则将返回您传递给相应函数的值。
创建一个定向缩放滑动条。
This method will draw a 3D-draggable handle on the screen that looks like one axis on Unity's built-in scale tool. The handle will stretch and will scale a single float up and down.
Scale slider handle in the Scene View.
将以下脚本作为 ScaleSliderExample.cs 添加到 Assets 文件夹,然后将 ScaleSliderExample 组件添加到场景中的对象。
using UnityEngine;
[ExecuteInEditMode]
public class ScaleSliderExample : MonoBehaviour
{
public float scale { get { return m_Scale; } set { m_Scale = value; } }
[SerializeField]
private float m_Scale = 1f;
public virtual void Update()
{
transform.localScale = new Vector3(scale, 1f, 1f);
}
}
将以下脚本作为 ScaleSliderExampleEditor.cs 添加到 Assets/Editor,然后选择包含 ScaleSliderExample 组件的对象。
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(ScaleSliderExample)), CanEditMultipleObjects]
public class ScaleSliderExampleEditor : Editor
{
public void OnSceneGUI()
{
ScaleSliderExample example = (ScaleSliderExample)target;
float size = HandleUtility.GetHandleSize(example.transform.position) * 1f;
float snap = 0.5f;
EditorGUI.BeginChangeCheck();
float scale = Handles.ScaleSlider(example.scale, example.transform.position, example.transform.right, example.transform.rotation, size, snap);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Change Scale Value");
example.scale = scale;
example.Update();
}
}
}