在Untiy3D中,我们可以使用协程来完成一些类似于多线程的功能。但协程并不是线程,它仍然在主线程里执行,只不过是由Unity3D调用的而已(类似于Update方法)。
首先我们举个简单的例子,实现延迟销毁的功能(Destroy方法的一个重载版本实现了这个功能,我们这里只是为了方便示例):
using UnityEngine;
using System.Collections;
public class DelayedDestroyTest : MonoBehaviour {
public float delayedSeconds = 5f;
private IEnumerator coroutineEnumerator;
// Use this for initialization
void Start () {
coroutineEnumerator = DelayedDestroy ();
StartCoroutine (coroutineEnumerator);
}
IEnumerator DelayedDestroy()
{
Debug.Log (string.Format("Game Object will be destroyed after {0} seconds", delayedSeconds));
yield return new WaitForSeconds (delayedSeconds);
Destroy (this.gameObject);
}
}
执行DelayedDestroy方法,返回了一个IEnumerator(至于为什么要使用一个私有变量,后面会介绍到),然后以这个返回值为参数调用StartCoroutine方法,就开启了一个协程。
重点在DelayedDestroy方法里:
第一行打印了一行log,这一行没有也没关系。
第二行yield return了一个WaitForSeconds类型的实例,这就告诉了Unity,在5秒(delayedSeconds)之后,再回来执行后面的代码。
第三行执行的Destroy方法(5秒之后)。
<