小工具知识网

当前位置: 首页 > 行业知识 > unity 等待事件之协程和Invoke

行业知识

unity 等待事件之协程和Invoke

2026-10-28 03:08:43 来源:互联网转载

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

()

文章目录

  • 前言
  • 一、Invoke用法
  • 二、协程的用法
    • 1.yiele return 介绍
    • 2.协程的使用
    • 总结

      前言

      提示:这里可以添加本文要记录的大概内容:

      协程的用法 和 Invoke 的等待事件使用

      ()

      提示:以下是本篇文章正文内容,下面案例可供参考

      一、Invoke用法

      //methodName:方法名称//time:等待时间Invoke(string methodName, float time);//methodName:方法名称//time:等待时间//repeatRate:每次重复执行之间的时间间隔InvokeRepeating(string methodName, float time, float repeatRate);//用法 void Start() { //等待2秒后执行     Invoke("OnInvoke",2f); //首次等待2秒后执行,然后5秒后 再次执行  InvokeRepeating("OnInvoke",2f,5); } public void OnInvoke() {      }

      二、协程的用法

      1.yiele return 介绍

       #region yiele 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  

      2.协程的使用

      代码如下(示例):

      using System.Collections;using System.Collections.Generic;using System.Linq;using Unity.VisualScripting;using UnityEngine;using UnityEngine.UI;public class NewBehaviourScript : MonoBehaviour{    // Start is called before the first frame update    public  bool bo;    int NumIndex;        void Start()    {                NumIndex = this.transform.childCount;        //等待几秒执行      //  WaitForSeconds();        //持续等待 条件达成  再执行        if (NumIndex>0)        {           // StartCoroutine(PlayFingerClickTask02());        }       // Invoke("OnInvoke",2f);        InvokeRepeating("OnInvoke", 2f, 5);    }    ///     /// 方法一    ///     ///     IEnumerator WaitForSeconds()    {        //等待3秒(这里的时间会受到Time.timeScale的影响);        yield return new WaitForSeconds(3);        Debug.Log("距离程序启动已经过了3s");    }     ///     /// 方法二  持续等待条件为true后执行(强烈推荐)    ///     ///     IEnumerator PlayFingerClickTask02()    {        Debug.Log("等待");        //等待区        yield return new WaitUntil(() => bo);        bo = false;        NumIndex -= 1;        Debug.Log("完成了");        if (NumIndex > 0)        {            StartCoroutine(PlayFingerClickTask02());        }    }    #region yiele 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  

      总结

      好记性不如烂笔头!

上一篇:饥荒怎么调服务器模组位置?

下一篇:服务器插头怎么插的好看?