bloggerAds

2017年7月7日 星期五

StartCoroutine

StartCoroutine,協同程序,
可以想成是一種排成,
須搭配IEnumerator 與yield return使用,

以下範例為做一連串的動作,
需求:
啟動DoMotion的Function後,
在五秒時執行Wait的function,
接著在一個frame後執行Jump的function,
最後在10秒後執行Walk的funtion

//部分程式碼:--------

void Start () {
    StartCoroutine(DoMotion());
}

IEnumerator DoMotion()
{
    yield return new WaitForSeconds(5.0f); //五秒後繼續執行
    Wait();
    yield return null; //一個frame後繼續執行
    Jump();
    yield return new WaitForSeconds(10.0f); //10秒後執行
    Walk();
}

void Wait()
{
    Debug.Log ("Wait");
}

void Jump()
{
    Debug.Log ("Jump");
}

void Walk()
{
    Debug.Log ("Walk");
}

換一種StartCoroutine的使用方法,
以string的方式呼叫執行Function,
好處是可以在必要的時候停止StartCoroutine,
以下範例當跑至Jump時停止了DoMotion,
故Walk的function將不會被執行到。
//部分程式碼:------

void Start () {
    StartCoroutine("DoMotion");
}



IEnumerator DoMotion()
{
    yield return new WaitForSeconds(5.0f);
    Wait();
    yield return null;
    Jump();
    yield return new WaitForSeconds(10.0f);
    Walk();
}

void Wait()
{
    Debug.Log ("Wait");
}

void Jump()
{
    StopCoroutine("DoMotion"); //停止了DoMotion的StartCoroutine
    Debug.Log ("Jump");
}

void Walk()
{
    Debug.Log ("Walk");
}

沒有留言:

張貼留言