本节要点
1.协同程序简介
1.什么是协同程序
协同程序,简称“协程”。在脚本运行过程中,需要额外的执行一些其他的代码,
这个时候就可以将“其他的代码”以协程的形式来运行。
类似于开启了一个线程,但是协程不是线程。
2.协同程序的使用前提
只有在继承了“MonoBehaviour”这个类的子类中才能使用相关的协程方法。
2.协同程序语法格式
1.定义协同程序
协同程序就是一个“代码片段”,往往我们需要将这个代码片段封装成一个方法,
或者称之为函数。
IEnumerator Task3()
{
yield return new WaitForSeconds (2); Debug.Log ("任务 3");
}
参数说明:
IEnumerator:协同程序的返回值类型;
yield return:协同程序返回 xxxxx;
new WaitForSeconds (秒数):实例化一个对象,等待多少秒后继续执行。
这个 Task3()的作用就是等待两秒后,继续执行任务 3.
2.开启协同程序
StartCoroutine(“协同程序方法名”);
这个 StartCoroutine 有三种重载形式,目前先只介绍这一种。
3.停止协同程序
StopCoroutine(“协同程序方法名”);
这个 StopCoroutine 也有三种重载形式,目前先只介绍这一种。
关键代码
CoroutinTest
public class CoroutinTest : MonoBehaviour {
// Use this for initialization
void Start () {
//普通程序 从上往下执行;
//Debug.Log("任务1");
//Debug.Log("任务2");
//Debug.Log("任务3");
//Debug.Log("任务4");
//协同程序
Debug.Log("任务1");
Debug.Log("任务2");
//Task3();//不是这样调用协同程序的
StartCoroutine("Task3");//开启协程; 跟之前线程不同的是 这是字符串的方法名
Debug.Log("任务4");
}
IEnumerator Task3() {//要注意协同程序返回值类型
//等待两秒后执行;
yield return new WaitForSeconds(2);//协同程序返回值格式 yield return
Debug.Log("任务3");
yield return new WaitForSeconds(2);//协同程序返回值格式 yield return,为了测试按下空格键后是否停止执行协程;
Debug.Log("任务5");
}
// Update is called once per frame
//通过按键停止协程的执行
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StopCoroutine("Task3");
}
}
}