提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
协程的用法 和 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.协程的使用
代码如下(示例):文章来源:https://www.toymoban.com/news/detail-849834.html
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模板网!