unity 等待事件之协程和Invoke

这篇具有很好参考价值的文章主要介绍了unity 等待事件之协程和Invoke。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


前言

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

协程的用法 和 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 < 10);
  */
 #endregion

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);
    }
    /// <summary>
    /// 方法一
    /// </summary>
    /// <returns></returns>
    IEnumerator WaitForSeconds()
    {
        //等待3秒(这里的时间会受到Time.timeScale的影响);
        yield return new WaitForSeconds(3);
        Debug.Log("距离程序启动已经过了3s");
    }
 
    /// <summary>
    /// 方法二  持续等待条件为true后执行(强烈推荐)
    /// </summary>
    /// <returns></returns>
    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 < 10);
     */
    #endregion





    /// <summary>
    /// 方法三
    /// </summary>
    public void OnInvoke()
    {
        Debug.Log("1111111");
    }


}
 


总结

好记性不如烂笔头!文章来源地址https://www.toymoban.com/news/detail-849834.html

到了这里,关于unity 等待事件之协程和Invoke的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android kotlin实战之协程suspend详解与使用

            Kotlin 是一门仅在标准库中提供最基本底层 API 以便各种其他库能够利用协程的语言。与许多其他具有类似功能的语言不同, async  与  await  在 Kotlin 中并不是,甚至都不是标准库的一部分。此外,Kotlin 的  挂起函数  概念为异步操作提供了比 future 与 pro

    2024年02月03日
    浏览(32)
  • Linux的进程,协程和线程

    Linux的进程、协程和线程是计算机科学中重要的概念,它们在操作系统和并发编程中发挥着关键的作用。让我们逐个详解这些概念,并讨论它们之间的关系。 进程是操作系统中的一个执行单元,它包含了程序执行所需的所有资源,如内存空间、文件描述符、寄存器等。 进程是

    2024年01月23日
    浏览(29)
  • go的协程和管道运用案例

    2024年01月19日
    浏览(29)
  • 多线程、协程和多进程并发编程

    37.1 如何通俗理解线程和进程? 进程:进程就是正在执⾏的程序。 线程:是程序执⾏的⼀条路径, ⼀个进程中可以包含多条线程。 通俗理解:例如你打开抖⾳,就是打开⼀个进程,在抖⾳⾥⾯和朋友聊天就是开启了⼀条线程。 再举⼀个例⼦: 在某⻝堂打饭的时候,此⻝堂安

    2024年02月02日
    浏览(85)
  • 浅谈Lua协程和函数的尾调用

    虽然不经常用到协程,但是也不能谈虎色变。同时,在有些场景,协程会起到一种不可比拟的作用。所以,了解它,对于一些功能,也会有独特的思路和想法。 概念 关于进程和线程的概念就不多说。 那么从多线程的角度来看,协程和线程有点类似:拥有自己的栈,局部变量

    2024年02月10日
    浏览(35)
  • 使用C语言构建一个独立栈协程和共享栈协程的任务调度系统

    使用了标准库头文件 setjmp.h 中的 setjmp 和 longjmp 两个函数,构建了一个简单的查询式协作多任务系统,支持 独立栈 和 共享栈 两种任务。 其中涉及到获取和设置栈的地址操作,因此还需要根据不同平台提供获取和设置栈的地址操作(一般是汇编语言,因为涉及到寄存器) 该

    2024年02月19日
    浏览(36)
  • 使用C++20协程和io_uring优雅地实现异步IO

    距离2020年已经过去很久了,各大编译器对于C++20各项标准的支持也日趋完善,无栈协程也是其中之一,所以我就尝试着拿协程与 io_uring 实现了一下proactor模式,这篇文章用来记录一下我的设计和想法。除此之外,我们能在网络上找到许多优秀的C++20协程的教程以及许多优秀的

    2024年03月27日
    浏览(35)
  • Unity 协程 Unity Task UniTask

    使用 StartCoroutine 和 IEnumerator yield return null 暂停执行并随后在下一帧恢复 yield return new WaitForSeconds(1f); 延迟1秒 waitfor系列有好几个 WaitForSeconds 和 WaitForSecondsRealtime 的区别 使用缩放时间将协程执行暂停指定的秒数。 实际暂停时间等于给定时间除以 Time.timeScale。如果要使用未缩放

    2024年02月08日
    浏览(26)
  • 【unity知识点】Unity 协程Coroutine

    Unity 协程是一种特殊的函数,可以在游戏中实现延迟执行、按顺序执行和异步操作等功能。它使用了迭代器(Iterator)的概念,通过 yield 来控制执行流程。下面是 Unity 协程的使用和使用场景的详细介绍。 在脚本中定义一个协程方法,返回值类型为 IEnumerator 。 在协程方

    2024年02月01日
    浏览(24)
  • Unity减少等待快速进入运行

    我们平时播放时一旦修改了c#的脚本总要加载进行等待,网上也缺乏如何设置,以及为什么?这样做可以达到这样的效果。 ------如何设置?【默认并不会开启】 Edit-Project Settings-Editor-Enter Player Mode Options      这样就设置完了 ----原理解释: 通过这样就减少了我们测试播放等待

    2024年02月13日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包