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

Добавьте следующий скрипт в папку Assets как LightColorLerp.cs и добавьте компонент LightColorLerp к объекту в сцене.
using UnityEngine;
[ExecuteInEditMode, RequireComponent(typeof(Light))]
public class LightColorLerp : MonoBehaviour
{
[SerializeField]
private Color m_Color1 = Color.red;
[SerializeField]
private Color m_Color2 = Color.green;
public float amount { get { return m_Amount; } set { m_Amount = Mathf.Clamp01(value); } }
[SerializeField, Range(0f, 1f)]
private float m_Amount = 1f;
private Light m_Light;
protected virtual void OnEnable()
{
m_Light = GetComponent<Light>();
}
public virtual void Update()
{
m_Light.color = Color.Lerp(m_Color1, m_Color2, m_Amount);
}
}
Добавьте следующий скрипт в Assets/Editor как LightColorLerpEditor.cs и выберите объект с компонентом LightColorLerp.
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(LightColorLerp)), CanEditMultipleObjects]
public class LightColorLerpEditor : Editor
{
protected virtual void OnSceneGUI()
{
LightColorLerp colorLerp = (LightColorLerp)target;
float size = HandleUtility.GetHandleSize(colorLerp.transform.position) * 5f;
float snap = 0.1f;
EditorGUI.BeginChangeCheck();
float newAmount = Handles.ScaleValueHandle(colorLerp.amount, colorLerp.transform.position, Quaternion.identity, size, Handles.ArrowHandleCap, snap);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(colorLerp, "Change LightColor Interpolation");
colorLerp.amount = newAmount;
colorLerp.Update();
}
}
}