在一个协程的在unity中的作用类似与线程,在其他地方看的说是“轻量级的线程”,具体的差别今天就不过多的去深究。下面来举例说明
如下:
Debug.Log("frist in Start ");
Mathod();
Debug.Log("second in Start ");
这只是普通方法是调用。在调用 mathod 的时候 外面的主线程会的等着 mathod去执行完。然后继续进行下一步。
而协程是
Debug.Log("frist in Start ");
StartCoroutine(Mathod);
Debug.Log("second in Start ");
调用到了mathod方法是 外面的主线程也是不会停止的。两个部分会“齐头并进”;
如图
好吧,其实很好理解嘛:)
那么在unity 调用协程要注意一些格式。
- 返回值 必须写出Ienumerator.
- 函数中的返回参数必须是 yield return null / 0;
- 在调 用时使用startcoroutine() 来调用。
- 停止时也是调用stopcoroutine 或者 stopcorouttineall。
比如说:
private IEnumerator ChangeColor()
{
Debug.Log("frist in ChangeColor ");
yield return new WaitForSeconds(3);
Cube.GetComponent<MeshRenderer>().material.color = Color.blue;
Debug.Log("frist in ChangeColor");
yield return null;
}
void Start () {
StartCoroutine(ChangeColor());
}
值得注意的时调用startcoroutine()和结束的方式stopcoroutine() 必须一致 :
这里有两种方式 Ienumerator 和 函数名 调用的方式。
Ienumerator 方式调用:
private IEnumerator ie;
...
{
ie = Fade();
StartCoroutine(ie);
}
...
{
stopCoroutine(ie);
}
函数名 调用方式:
...{
StartCoroutine("Mathod");
}
...
{
stopCoroutine("Mathod");
}
必须一样才起作用。