協程是什么?
協程是一個分部執行,遇到條件(yield return 語句)會掛起,直到條件滿足才會被喚醒繼續執行后面的代碼。
通俗點說:程序內部可中斷,然后轉而執行別的子程序,在適當的時候再返回來接著執行。
協程的運行
協程不是線程,也不是異步執行的。協程和 MonoBehaviour 的 Update函數一樣也是在MainThread中執行的。
協同程序可以和主程序并行運行,和多線程有點類似。
協程的作用
1、延時(等待)一段時間執行代碼;
2、等某個操作完成之后再執行后面的代碼。
總結起來就是一句話:控制代碼在特定的時機執行。
Paste_Image.png
協程的定義
在C#中,協程返回值必須是Ienumerator,yield要用yield return 來替代,并且啟動協同程序用StartCoroutine 函數
yield 和 IEnumerator都是C#的東西,他們是一個關鍵字,StartCoroutine是枚舉類的接口。
Paste_Image.png
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading;
public class xiecheng : MonoBehaviour
{
void Start()
{
StartCoroutine(One());//開啟協成
for (int i = 0; i < 200; i++)//循環A
{
Debug.Log("————" + i);
Thread.Sleep(10);
}
}
IEnumerator One()
{
for (int i = 0; i < 100; i++)//循環B
{
Debug.Log("***********" + i);
}
yield return new WaitForSeconds(1f);//協程1
for (int i = 0; i < 100; i++)//循環C
{
Debug.Log("$$$$$$$$$$" + i);
yield return null;//協程1
}
}
void Update()
{
Debug.Log("upda");
}
void LateUpadate()
{
Debug.Log("------LateUpadate");
}
}
運行結果:先執行循環B,然后執行循環A,然后執行update()和lateUpdate()的方法,等待1S之后,在updat()和lateupda()之間執行循環C的輸出。