Unity Coroutine协同程序

Coroutine也称协同程序或协程,可以和主程序并行运行,和多线程有些类似,但是在任一时刻只会有一个协同程序在运行,别的协同程序则会挂起。协同程序可以用来实现一段程序等待一段时间后继续运行的效果,或等待某个条件为true继续运行。

StartCoroutine:启动一个协程

StopCoroutine:终止一个协程

StopAllCoroutines:终止所有协同程序

WaitForSeconds:等待若干秒

通过IEnumerator 中使用yield return语句得到的返回值,当你“yield”一个方法时,你相当于说了,“现在停止这个方法,然后在下一帧中从这里重新开始!”。

0或者nullyield的意思是告诉协程等待下一帧,直到继续执行为止。当然,同样的你可以继续yield其他协程。

嵌套的协程:

Using UnityEngine;  
Using System.Collections;  
   
Public class TimerExample : MonoBehaviour  
{  
    voidStart()  
    {  
        StartCoroutine(SaySomeThings());  
    }  
   
    //Say some messages separated by time  
    IEnumerator SaySomeThings()  
    {  
        Debug.Log("The routine has started");  
        Yield return StartCoroutine(Wait(1.0f));  
        Debug.Log("1 second has passed since the last message");  
        Yield return StartCoroutine(Wait(2.5f));  
        Debug.Log("2.5 seconds have passed since the last message");  
    }  
   
    //Our wait function  
    IEnumerator Wait(float duration)  
    {  
        for(float timer = 0; timer < duration; timer += Time.deltaTime)  
            Yield return 0;  
    }  
}  

运动到某一位置:

usingUnityEngine;  
Using System.Collections;  
   
Public class MoveExample : MonoBehaviour  
{  
    ublic Vector3 targetPosition;  
    ublic float moveSpeed;  
   
    Void Start()  
    {  
        StartCoroutine(MoveToPosition(targetPosition));  
    }  
   
    IEnumerator MoveToPosition(Vector3 target)  
    {  
        while(transform.position != target)  
        {  
            transform.position = Vector3.MoveTowards(transform.position, target, moveSpeed * Time.deltaTime);  
            Yield return 0;  
        }  
    }  
}  


你可能感兴趣的:(Unity Coroutine协同程序)