Unity制作颜色渐变的倒计时

发表于2019-01-28
评论0 5.7k浏览
项目需要制作颜色渐变的倒计时,挺简单的代码,大体思路就是开一个协程,在协程里面控制颜色的变化以及进度条的进度。

代码如下:
public void ShowSliderWithId(int time)
{
    GameObject sl = (GameObject)Instantiate (_sliderPrefab);
    sl.transform.parent = transform;  //设置父节点
    sl.transform.localScale = new Vector3 (1f,1f,1f);
    sl.transform.localPosition = new Vector3 (0f,0f,0f);
    sl.GetComponent<UISlider> ().value = 1f;
    StartCoroutine (ScheduleUpdateGlobal (sl,time));
}
IEnumerator ScheduleUpdateGlobal(GameObject obj,int time)
{
    float seconds = 0;//倒计时时间
    UISlider slider  = obj.GetComponent<UISlider> ();
    UISprite sprite = obj.GetComponent<UISprite> ();
    while(true)  
    {  
        for (float timer = 0; timer < 1; timer += Time.deltaTime) {//控制时间1秒走完
            seconds += Time.deltaTime;  
            slider.value = (1-seconds / time);
            if (seconds > time / 2) { //时间到达一半开始我这里要求是时间过去一半颜色开始变化
                float g = ((time - seconds) * 2 / time);
                sprite.color = new Color (1, g, 1, 1);//控制g渐变为红色
            }
            yield return 0; 
        }
        if (seconds >= time) {
            GameObject.Destroy (obj);
            break; //跳出死循环
        }
    }
}

使用的是环形进度条,ui用的是NGUI,需要在Inspector面板中UISprite里面的type选择filled,fillDir选择redial360;

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引