欢迎来到多呀多啊的博客
Zou-Wang
多呀多啊
世界大雨磅沱,万物苟且而活,无人为你背负更多

Unity3D协程介绍 以及 使用

Unity协程这块一直有些不懂,网上找到这个博文介绍的挺好的,引荐过来了。

原文点击:https://blog.csdn.net/huang9012/article/details/38492937?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

一、协程讲解

以一段代码为例进行分析:

using UnityEngine;
using System.Collections;
public class CoroutineCountdown : MonoBehaviour
{
void Start()
{
StartCoroutine(Countdown());  //在start中开启协程,并执行定义的方法
}
//创建一个带有协程的方法,要有 IEnumerator 进行修饰 IEnumerator Countdown() { for(floattimer = 3; timer >= 0; timer -= Time.deltaTime) //循环 Yield return 0; //打断循环,下一帧再从这里接着执行 Debug.Log("This message appears after 3 seconds!"); } }

  原本Countdown方法是在Start方法中被执行,则意味着在脚本执行的第一帧时,Countdown方法就应该全部执行完毕(即在一帧内,方法内部的循环也执行完毕),但是在执行第一次循环,执行到Yield return 0时,这句话等于告诉系统,当前的这个方法(Yield return 0所在的这个方法)停在这里别往下执行了,等到下一帧的时候再从这里接着往下执行。换句话说就是,方法会执行完,循环也会执行完,只不过Yield把这个Countdown方法内部的循环给打断了,让这个循环不是在一帧内执行完毕,而是分为每帧循环一次,直至循环完毕。【这个可用于一些比较耗时的事情,比如加载资源,一次全部加载资源的话会卡,就可以使用这个yield方法使加载资源分为每帧执行一次这样就不会太卡了】

注意:用0或者null来yield的意思是告诉协程等待下一帧,直到继续执行为止。同样可以yield其他协程;

二、补充知识

1、开始和终止协程

(1)开始协程:通过 StartCoroutine()方法来开始一个协程,就像这样:   StartCoroutine(Countdown());

(2)终止协程:通过StopAllCoroutines()方法来实现当前对象中所有协程的终止;

注:这只会终止在调用该方法的对象中(应该是指调用这个方法的类吧)开始的协程,对于其他的MonoBehavior类中运行的协程不起作用

2、停止某一协程

    想要终止某一个特定的协程,那么必须在开始协程的时候将它的方法名作为字符串

//通过字符串来开始某一协程
StartCoroutine("FirstTimer");
StartCoroutine("SecondTimer");   

//通过字符串来终止某一协程 //You can stop it anytime by name! StopCoroutine("FirstTimer");

  

posted @ 2020-05-31 20:50  多呀多啊  阅读(334)  评论(0编辑  收藏  举报
Live2D
看板娘