一起来玩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中协程的简单介绍。

点个关注,给个赞呗!

猜你喜欢

转载自blog.csdn.net/maybe_ice/article/details/105417570