上一篇太复杂了,,而且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;
完美解决