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 Light Color Interpolation"); colorLerp.amount = newAmount; colorLerp.Update(); } } }