Version: 2020.3

Handles.ScaleValueHandle

切换到手册
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 手柄。该手柄不会移动并将会上下缩放单个浮点。\ \ \ 场景视图中的缩放值手柄(箭头端盖作为手柄)。\ \ 将以下脚本作为 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(); } } }