unity 等待事件之协程和Invoke

05-28 1422阅读

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

unity 等待事件之协程和Invoke
(图片来源网络,侵删)

文章目录

  • 前言
  • 一、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  
      

      总结

      好记性不如烂笔头!

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]