value | 用户可以修改的值。 |
position | Handles.matrix 空间中手柄的位置。 |
rotation | Handles.matrix 空间中手柄的旋转。 |
size | Handles.matrix 空间中手柄的大小。如果您想要一个恒定的屏幕空间大小,请使用 HandleUtility.GetHandleSize。 |
snap | 贴靠增量。请参阅 Handles.SnapValue。 |
capFunction | 要在执行实际绘制时调用的函数。 |
float 通过用户与手柄的交互修改的新值。如果用户没有移动手柄,则将返回您传递给相应函数的值。
创建一个缩放单个浮点的 3D 手柄。
此方法将会在屏幕上绘制一个可拖动的 3D 手柄。该手柄不会移动并将会上下缩放单个浮点。\ \ \ 场景视图中的缩放值手柄(箭头端盖作为手柄)。\ \ 将以下脚本作为 LightColorLerp.cs 添加到 Assets 文件夹,然后将 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); } }
将以下脚本作为 LightColorLerpEditor.cs 添加到 Assets/Editor,然后选择包含 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(); } } }