UnityAPI—Coroutine

public class API08Coroutine : MonoBehaviour {

    public GameObject cube;
    // Use this for initialization
    void Start () {
        //print("hha");
        ////ChangeColor();
        //StartCoroutine(ChangeColor());
        ////协程方法开启后,会继续运行下面的代码,不会等协程方法运行结束才继续执行
        //print("hahaha");
    }

    private IEnumerator ie;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //ie = Fade();
            //StartCoroutine(ie);
            StartCoroutine("Fade");
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            //StopCoroutine(ie);
            StopCoroutine("Fade");
        }
    }

    IEnumerator Fade()
    {
        for (; ; )
        {
            //cube.GetComponent<MeshRenderer>().material.color = new Color(i, i, i,i);
            Color color = cube.GetComponent<MeshRenderer>().material.color;
            Color newColor = Color.Lerp(color, Color.red, 0.02f);
            cube.GetComponent<MeshRenderer>().material.color = newColor;
            yield return new WaitForSeconds(0.02f);
            if (Mathf.Abs(Color.red.g - newColor.g) <= 0.01f)
            {
                break;
            }
        }
    }


    //Coroutines
    //1,返回值是IEnumerator
    //2,返回参数的时候使用yield return  null/0;
    //3,协程方法的调用StartCoroutine(method())
    IEnumerator ChangeColor()
    {

        print("hahaColor");
        yield return new WaitForSeconds(3);
        cube.GetComponent<MeshRenderer>().material.color = Color.blue;
        print("hahaColor");
        yield return null;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42459006/article/details/82082713