用协程制作帧动画

上一篇太复杂了,,而且bug比较多,简化了一下
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    Image image;
	IEnumerator Start ()
    {
        image = GameObject.Find("Image").GetComponent<Image>();
       
       // yield return StartCoroutine(Change());
       yield return StartCoroutine(Fade());
       
    }
    IEnumerator Change()
    {
        
        float a = 1;
        float b = 1.05f;
        float timer1 = 0,timer2=0;
        float f;

        while(true)
        {
            if (timer2 <= 0.3f)
            {
                timer2 += Time.deltaTime;
                f = Mathf.Lerp(a, b, timer2 / 0.3f);
                image.rectTransform.sizeDelta = image.rectTransform.sizeDelta / f;
                image.color = Color.Lerp(new Color(1, 0.6f, 0.26f, 0.2f), new Color(1, 0.6f, 0.26f, 0.3f), timer2 / 0.3f);
                yield return null;
            }
            else if (timer1 <= 0.3f)
            {
                timer1 += Time.deltaTime;
                f = Mathf.Lerp(a, b, timer1 / 0.3f);
                image.rectTransform.sizeDelta = image.rectTransform.sizeDelta *f;
                image.color = Color.Lerp(new Color(1, 0.6f, 0.26f, 0.3f), new Color(1, 0.6f, 0.26f, 0.2f), timer1 / 0.3f);
                yield return null;
            }
           
            else
            {
                timer1 = 0;
                timer2 = 0;
            }
            yield return null;
        } 
    }
    IEnumerator Fade()
    {
      while (true)
       {
            for (int i = 0; i < 30; i++)
            {
                yield return null;
                //image.GetComponent<Graphic>().CrossFadeColor(new Color(0, 0, 1, 0.2f), 3, false, true);
                image.CrossFadeAlpha(0, 1f, true);
                image.transform.localScale += image.transform.localScale*0.02f; 
            }
            for (int i = 0; i < 30; i++)
            {
                yield return null;
                //image.GetComponent<Graphic>().CrossFadeColor(new Color(0, 0, 1, 0.8f), 3, false, true);
                image.transform.GetComponent<Image>().CrossFadeAlpha(1, 1f, true);
                image.transform.localScale -= image.transform.localScale *0.02f;
            }
          yield return null;
        }
    }
}

这么写其实犯了一个很大并且很低级的问题,
这样是万万不能回到原来的状态滴,于是乎,我请教了下隔壁小朋友,用最简单的思维给我解决了

如下:
image.transform.localScale *= 1.02f;

image.transform.localScale /= 1.02f;

完美解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值