Unity協程:協同程序

協程是什么?

協程是一個分部執行,遇到條件(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的輸出。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容