Skip to content

FlexValue - 动画数值

🚧 施工中

本文档仍在施工!

他很新,以至于飞书上也没有同步文档,等俺写一下!

FlexValue 是一个便于实现代码动画的数值类,其本质是一个按照固定规则靠近目标的数值
在制作一些经常被打断的动画,如 UI 的动效时非常好用。

快速使用

以下示例演示了如何使用 FlexValue 来实现一个简单的 UI 缩放功能:

C#
public class ButtonZoom : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    // 定义 FlexValue
    // FlexValue 本身是抽象类,可以在下方创建对象时选择一个合适的具体实现
    // 但是在定义的时候,直接用 FlexValue 即可,他提供了全部的接口
    private FlexValue scaler;

    private void Start()
    {
        // LerpFloat 是 FlexValue 的一个较平滑曲线的实现
        // 除此之外,还有线性的 LinearFloat 可以使用
        // 第一个参数是初始值,第二个参数是变换速度,对于 LerpFloat 而言取 0.01~0.3 效果较好
        scaler = new LerpFloat(1f, 0.1f)
                    .ValueChanged(val => transform.localScale = Vector3.one * val); // 当值更新时执行的操作,这里改变按钮的缩放
    }

    private void Update()
    {
        // FlexValue 需要手动在 Update 或 FixedUpdate 中调用 Update 方法,用于更新值
        scaler.Update(Time.deltaTime); 
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        // 鼠标进入时,将目标值设为 1.2
        // scaler 本身的值将缓慢过渡到 1.2,并在过渡时更新 transform.localScale
        scaler.SetTarget(1.2f); 
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        // 鼠标退出时,将目标值设为 1
        scaler.SetTarget(1f); 
    }
}