📜  unity return coroutine - C# (1)

📅  最后修改于: 2023-12-03 15:05:44.878000             🧑  作者: Mango

使用Unity中的协程(Coroutine)

Unity使用协程(Coroutine)在游戏中实现异步处理和延迟操作,使得编写游戏逻辑更加灵活和高效。在本文中,我们将介绍如何在Unity中使用协程。

协程的定义

协程(Coroutine)是一种在程序执行期间可以暂停和恢复执行的函数。协程自带“暂停”和“继续”的API接口,使得编写异步操作非常方便。在Unity中,协程是通过yield return语句进行控制的。

使用协程

使用协程需要借助Unity中的IEnumerator接口。下面是一个基本的协程示例:

using UnityEngine;
using System.Collections;

public class CoroutineTest : MonoBehaviour
{
    IEnumerator Coroutine()
    {
        Debug.Log("协程开始!");
        yield return new WaitForSeconds(3);
        Debug.Log("协程暂停3秒后继续执行!");
        yield return null;
        Debug.Log("协程执行结束!");
    }

    void Start()
    {
        StartCoroutine(Coroutine());
    }
}

在上面的示例中,我们定义了一个协程Coroutine(),在该协程中,我们打印一些提示信息,并且在协程执行时间达到3秒之后暂停一段时间,并且继续执行。在Start()函数中,我们通过StartCoroutine()函数来启动协程。

常见的协程操作
WaitForSeconds

WaitForSeconds通过协程提供一种简单的等待方式,可以暂停协程一段时间。下面是一个使用WaitForSeconds的协程示例:

IEnumerator Coroutine()
{
    Debug.Log("协程开始!");
    yield return new WaitForSeconds(3);
    Debug.Log("协程暂停3秒后继续执行!");
    yield return null;
    Debug.Log("协程执行结束!");
}
WaitUntil

WaitUntil可以将协程的执行暂停,直到满足条件时协程才会继续执行。下面是一个使用WaitUntil的协程示例:

IEnumerator Coroutine()
{
    Debug.Log("协程开始!");
    yield return new WaitUntil( ()=>{ return Input.GetKey(KeyCode.Space); } );
    Debug.Log("空格键按下了!");
    yield return null;
    Debug.Log("协程执行结束!");
}
WaitForSecondsRealtime

WaitForSecondsRealtime会暂停协程一段时间,但是不会受到Time.timeScale的影响。下面是一个使用WaitForSecondsRealtime的协程示例:

IEnumerator Coroutine()
{
    Debug.Log("协程开始!");
    yield return new WaitForSecondsRealtime(3);
    Debug.Log("协程暂停3秒后继续执行!");
    yield return null;
    Debug.Log("协程执行结束!");
}
YieldInstruction

YieldInstruction是一个基类,用于协程中暂停和恢复的方法。上面介绍的WaitForSecondsWaitUntilWaitForSecondsRealtime都是YieldInstruction的派生类。

StopCoroutine

StopCoroutine函数可以停止指定的协程。如果协程正在执行中,则停止之后,后面所有的yield return和代码都不会被执行。

private Coroutine coroutine;

void Start()
{
    coroutine = StartCoroutine(Coroutine());
}

void StopCoroutine()
{
    StopCoroutine(coroutine);
}
StopAllCoroutines

StopAllCoroutines函数可以停止所有协程。

void StopAllCoroutines()
{
    StopAllCoroutines();
}
总结

本文主要介绍了在Unity中使用协程的方法和示例代码。使用协程可以方便地处理异步操作和延迟操作,对于游戏逻辑的编写非常有用。在编写时需要注意yield return语句的使用和协程停止的时机。