协程开启和停止的方法

本文详细介绍了在Unity中如何使用IEnumerator、Coroutine以及各种YieldReturn的用法,包括启动和停止协程,以及不同YieldReturn值的作用和场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

协程开启和停止的方法


使用IEnumerator 

IEnumerator ie;//声明变量

ie = Test(); //将协程函数赋值给变量

StartCoroutine(ie);//开启协程

StopCoroutine(ie);//关闭协程

使用 Coroutine

Coroutine stopCor_1;//声明变量

stopCor_1 = StartCoroutine(Test());//将协程函数赋值给变量,同时启动该协程。

StartCoroutine(stopCor_1);//开启协程

StopCoroutine(stopCor_1);//关闭 协程

使用字符串的函数名

StartCoroutine(“stopCor_1”);//开启协程

StopCoroutine(“stopCor_1”);//关闭协程

 Yield Return 用法


yield return null; // 下一帧再执行后续代码

yield return 0; //下一帧再执行后续代码

yield return 6;//(任意数字) 下一帧再执行后续代码

yield break; //直接结束该协程的后续操作

yield return asyncOperation;//等异步操作结束后再执行后续代码

yield return StartCoroution(/*某个协程*/);//等待某个协程执行完毕后再执行后续代码

yield return WWW();//等待WWW操作完成后再执行后续代码

yield return new WaitForEndOfFrame();//等待帧结束,等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前执行

yield return new WaitForSeconds(0.3f);//等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间会受到Time.timeScale的影响);

yield return new WaitForSecondsRealtime(0.3f);//等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间不受到Time.timeScale的影响);

yield return WaitForFixedUpdate();//等待下一次FixedUpdate开始时再执行后续代码

yield return new WaitUntil()//将协同执行直到 当输入的参数(或者委托)为true的时候....如:yield return new WaitUntil(() => frame >= 10);

yield return new WaitWhile()//将协同执行直到 当输入的参数(或者委托)为false的时候.... 如:yield return new WaitWhile(() => frame < 10);

引用

https://blog.youkuaiyun.com/beihuanlihe130/article/details/76098844

https://blog.youkuaiyun.com/Czhenya/article/details/115936459

### Unity 中与协程相关的常用方法 #### 协程启动 在 Unity 中,`StartCoroutine()` 方法用于启动一个新的协程。此函数接受一个 `IEnumerator` 类型的方法作为参数并返回一个 `Coroutine` 对象,该对象可以用来停止这个特定的协程。 ```csharp // 启动名为 MyCoroutine 的协程,并获取其引用以便后续控制 Coroutine myCoroutineInstance = StartCoroutine(MyCoroutine()); ``` #### 协程暂停 为了使协程能够等待一段时间再继续执行,通常会在协程内部调用 `yield return new WaitForSeconds(float seconds)` 来实现延迟效果[^2]。 ```csharp private IEnumerator MyCoroutine() { Debug.Log("Starting coroutine..."); yield return new WaitForSeconds(2f); Debug.Log("Continuing after delay."); } ``` #### 终止单个协程 当不再需要某个已经启动的协程时,可以通过传递之前通过 `StartCoroutine()` 获取到的对象给 `StopCoroutine(Coroutine routine)` 函数来终止它。 ```csharp if (myCoroutineInstance != null) { StopCoroutine(myCoroutineInstance); } ``` #### 终止所有协程 如果想要一次性结束当前脚本实例中的全部活动着的协程,则可以直接调用 `StopAllCoroutines()` 而无需指定具体哪一个要被停止。 ```csharp void OnDestroy() { StopAllCoroutines(); } ``` #### 利用事件触发器管理协程状态变化 除了基本的操作外,在实际开发过程中还可以结合 Unity 提供的各种组件特性(比如按钮点击、碰撞检测等),灵活地开启或关闭相应的协程逻辑处理流程,从而更好地满足游戏设计需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值