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总结
好记性不如烂笔头!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
