协程实现canvas图像随机闪烁
如图,闪烁截图。代码如下,挂在canvas下的image上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//获得image列表,将列表索引打乱,然后顺序的显示图片并闪烁(使用协程)
//
//类的方法transform.childCount
//transform.GetChild (i)获得子对象
//strat函数可以使用协程,update不可以使用协程
public class MyRandomFlash : MonoBehaviour {
private List<Image> imagelist =new List<Image> ();//注意是List<Image>类型的,而不是Image.
private float flashtime = 1f;
public float intervalTime = 0.5f;
// Use this for initialization
IEnumerator Start()
{
imagelist.Clear();
//初始化imagelist列表
int len = transform.childCount;
for (int i = 0; i < len; i++)
{
//imagelist[i] = transform.GetChild (i).GetComponent <Image>() ;//这里也可以使用列表的add方法
imagelist.Add(transform.GetChild(i).GetComponent<Image>());
}
List<int> myindex = GetRandomIndexs(imagelist.Count);
for (int i = 0; i < imagelist.Count; i++)
{
Image myimage = imagelist[myindex[i]];
StartCoroutine(Flash(myimage));
yield return new WaitForSeconds(Random.Range(0, intervalTime));
}
}
// Update is called once per frame
//strat中的变量不能在update中使用
//协程实现图片闪烁
IEnumerator Flash(Image image) {
for (float f=1f;f>0;f=f-Time .deltaTime/flashtime/2 ) {
Color c = image.color;
c.a = f;
image.color = c;
yield return 0;
}
for (float f = 0f; f <1; f = f + Time.deltaTime / flashtime / 2)
{
Color c = image.color;
c.a = f;
image.color = c;
yield return 0;
}
yield return 0.2f;
}
//获得随机的索引
List<int> GetRandomIndexs(int count)
{
List<int> result = new List<int>();//存储最终的索引
List<int> list = new List<int>();//辅助实现不重复
for (int i = 0; i < count; i++)
{
list.Add(i);
}
while (list.Count > 0)
{
int index = Random.Range(0, list.Count);
Debug.Log(index);
result.Add(list[index]);
list.Remove(list[index]);
}
return result;
}
}