一起來玩U3D之協程基礎

程序、進程、線程

程序是以文件的形式被存放在外存儲器的一組指令的有序集合,是靜態的概念,運行一個程序首先要將程序文件從外存儲器調入內存才能運行。進程是一個正在執行的程序,是一個動態的概念,簡單來說程序被執行調入內存後被稱爲進程[CPU只能訪問內存的數據],進程可以細分爲線程,這樣可以充分共享資源,減少內存開內銷提高併發性。

好,簡單的瞭解了程序、進程、線程的關係之後,我們來看看unity的協程到底是什麼。
  • 協程的概念:伴隨着主線程⼀起運⾏的⼀段程序。
  • 注意:協程既不是進程,也不是線程,而只是函數
創建協程的方法
  • 返回值關鍵字 IEnumerator
  • 必須返回 Yield Return,只要發現yield關鍵字,就會暫停協程,等待下一幀或者規定的時間後執行
yield有以下情況:
  • yield return 【具體的值】:等待下⼀幀繼續執⾏ (Update之後)
  • yield return new WaitForEndOfFrame() :等待下⼀幀繼續執⾏(OnGUI之後)
  • yield return new WaitForSeconds(n) :等待n秒之後繼續執⾏
  • yield return new WaitForFixedUpdate() :等待⼀個fixed的時間間隔之後繼續執⾏
  • yield return StartCoroutine(協程⽅法); : 等待yield return 的協程執⾏完了之後繼續執⾏
開啓協程的方法
  • StartCoroutine(協程⽅法([協程參數]))
  • StartCoroutine(”⽅法名稱”)
  • StartCoroutine(”⽅法名稱”,⽅法參數)——注意,此種方式,參數只能有一個
停止協程
  • StopCoroutine(Coroutine)
  • StopCoroutine(IEnumerator)
  • StopCoroutine(string methodName)——注意,此種方式,只能停掉用字符串啓動的協程
  • StopAllCoroutine:停⽌所有正在運⾏的協程————慎用!!!
跳出攜程
  • yield break
特殊協程
  • IEnumerator Start()——Start協程會在遊戲開始時⾃動啓動
下面是一個用協程寫的塔防遊戲出怪的簡單的Demo
using UnityEngine;
using System.Collections;
using System;

public class IEDemo : MonoBehaviour {

    private void Start()
    {
        //StartCoroutine(coroutine());
    }

    IEnumerator coroutine()
    {
        for (int i = 0; i < 5; i++)
        {
            yield return new WaitForSeconds(5);

            for (int j = 0; j < 10; j++)
            {
                yield return new WaitForSeconds(1);

                Debug.Log("第" + (i + 1) + "波,第" + (j + 1) + "個怪。");
            }
        }
    }

}

好了,以上就是對unity中協程的簡單介紹。

點個關注,給個讚唄!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章