Объявление
public static float ScaleSlider(float scale, Vector3 position, Vector3 direction, Quaternion rotation, float size, float snap);Параметры
scale | Значение, которое пользователь может изменить. |
position | Положение ручки в пространстве Handles.matrix. |
direction | Направление ручки в пространстве Handles.matrix. |
rotation | Вращение ручки в пространстве Handles.matrix. |
size | Размер дескриптора в пространстве Handles.matrix. Используйте HandleUtility.GetHandleSize, если вам нужен постоянный размер экранного пространства. |
snap | Шаг привязки. См. раздел Handles.SnapValue.. |
Возвращает
float Новое значение, измененное взаимодействием пользователя с дескриптором. Если пользователь не перемещал дескриптор, он вернет то же значение, которое вы передали в функцию.
Описание
Создаёт ползунок шкалы направления.
Этот метод рисует на экране 3D-перетаскиваемый маркер, который выглядит как одна ось встроенного в Unity инструмента масштабирования. Ручка растянется и будет масштабировать одно поплавок вверх и вниз.

Добавьте следующий скрипт в папку Assets как ScaleSliderExample.cs и добавьте компонент 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);
}
}
Добавьте следующий скрипт в Assets/Editor как ScaleSliderExampleEditor.cs и выберите объект с компонентом 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();
}
}
}