Unity 通过修改Scale 实现物体/UI 果冻效果

实现 

[SerializeField]
[Header("初始大小")]
private Vector3 scaleOrigin = new Vector3(1, 1, 1);

[SerializeField]
[Header("变化率")]
private float[] rate = { 1.12f, 1, 1.09f, 1, 1.06f, 1, 1.03f, 1 };

[SerializeField]
[Header("当前变化后大小")]
private Vector3 scaleCurrent = new Vector3(1, 1, 1);

[SerializeField]
[Header("计时器")]
private float timer = 0;

[SerializeField]
[Header("每次变化时长")]
private float[] duration = { 0.095f, 0.095f, 0.065f, 0.065f, 0.035f, 0.035f, 0.05f, 0.05f };

[SerializeField]
[Header("开启效果")]
private bool effect = false;

[SerializeField]
[Header("当前变化")]
private int index = 0;

private void OnEnable()
{
    scaleOrigin = transform.localScale;
    scaleCurrent = scaleOrigin * rate[index];
    effect = false;
}

// Update is called once per frame
private void Update()
{
    if (effect)
    {
        timer += Time.deltaTime;

        if (index >= rate.Length || index >= duration.Length)
        {
            scaleCurrent = scaleOrigin;
            index = 0;
            timer = 0;
            effect = false;
            return;
        }

        if (timer < duration[index])
        {
            transform.localScale = Vector3.Lerp(transform.localScale, scaleCurrent, timer / duration[index]);
        }

        if (timer > duration[index])
        {
            transform.localScale = scaleCurrent;

            timer = 0;
            index++;

            if (index < rate.Length && index < duration.Length)
            {
                scaleCurrent = scaleOrigin * rate[index];
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值