Unity协程认知

Unity协程认知协程使用之前请注意以下几点:1.协程只需要调用一次,只需要调用一次,只需要调用一次!2.yieldreturn表示挂起,挂起的意思是协程里的变量会被保留,直到达到return的条件才会执行return以下的代码片段。举个例子:yieldreturnnewWaitForSeconds(0.9f);//执行到这儿,等待0.9s,继续执行这句代码以下的代码片段3.开启协程的方式:a.Sta

大家好,又见面了,我是你们的朋友全栈君。

协程使用之前请注意以下几点:

1.协程只需要调用一次,只需要调用一次,只需要调用一次 !

2.yield return表示挂起,挂起的意思是协程里的变量会被保留,直到达到return的条件才会执行return以下的代码片段。

举个例子:

yield return new WaitForSeconds(0.9f);//执行到这儿,等待0.9s,继续执行这句代码以下的代码片段

3.开启协程的方式:

a.StartCorountine("协程函数名");
b.StartCorountine(协程函数名(协程形参));//可以传多个参数

4.协程只需调用一次,但可以控制内部执行次数:

a.一次:不需要判断语句
举个例子:
IEnumerator OnlyOnce()//i++和++i的差别请自行百度
{
	int i = 0;
	yield return i++;//i加1以后执行Debug语句
	Debug.Log("i = {0}" + i);
}
void Start()
{
	StartCorountine("OnlyOnce");//控制台输出:i = 1
}

b.有限次:需要判断语句
举个例子:

IEnumerator FiniteTimes()
{
	int i = 0;
	while(i < 9)
	{
		i++;
		//只需要执行协程,无条件挂起,可以用yield return null 或者 yield return 0
		yield return i;
	}
	Debug.Log("i = " + i);
}
void Start()
{
	StartCorountine(FiniteTimes());//输出: i = 9
}

c.无限次,类似Update或者FixedUpdate函数:永真式->while(true)
举个例子:

IEnumerator AllTheWay()
{
    int i = 0;
	while(true)
	{
		yield return ++i;
		if(i > 9)
		{
			yield break;//yield break为结束循环的语句,表示协程内的循环执行到这儿结束,类似一般循环中的break
		}
		
		Debug.Log("i = " + i);//会输出1-9
		
		//可以多个yield return语句同时使用
		yield return new WaitForSeconds(0.9f);//等待0.9秒,执行下面代码块
		yield return new WaitForEndOfFrame();//等待所有GameObject渲染完成之后执行后面语句
	}
}

5. 一个最近弄明白的坑(错了,具体请看下面仰望星空的评论)


目标:点击UGUI的button,立即输出“CallFunc()”
	//将CallFunc挂到UGUI的button上,点击button,然后..........
	//然后等2.9s后才会输出“CallFunc()”
	public void CallFunc()
	{
		Debug.Log("CallFunc()");
		StartCoroutine(Func());
	}
	IEnumerator Func()
	{
		yield return new WaitForSeconds(2.9f);
		Debug.Log("Func()");
	}

解决方法: 协程前面加一行代码(a)yield return 0;(b)yield return null;

	IEnumerator Func()
	{
		//yield return null;
		yield return 0;
		yield return new WaitForSeconds(2.9f);
		Debug.Log("Func()");
	}

6.协程不是多线程:

协程是在主线程(Main Thread)执行的过程中开启的一段逻辑处理,和主线程共用一份资源,挂起的时候不会阻塞主线程,但要注意的是同一时刻只运行一个协程;多线程则不能共享主线程里的资源,需要关心同步以及锁的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148616.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • webstorm 快捷键 失效问题[通俗易懂]

    webstorm 快捷键 失效问题[通俗易懂] 解决方案一:file-&gt;Settings-&gt;Keymap-&gt;设置为Default解决方案二:file-&gt;Settings-&gt;IdeaVim-&gt;取消对勾重启即可。原博客地址:https://blog.csdn.net/jianyuling199/article/details/80772479…

    2022年6月23日
    55
  • javascript typescript_typescript python

    javascript typescript_typescript python前言:无论在学习什么语言的时候,我们都需要明白其该怎么样去定义一个变量或者Function,那么今天我们来看看TypeScript的数据类型。文章目录:一.Ts与Js的区别二.Ts的数据![在这里插入图片描述](https://img-blog.csdnimg.cn/8904446afa764db282b731721429ebda.png)三.数据类型应用1.any类型:2.number类型:3.string类型:4.Array类型:(1).[]:(2).数组泛型:一.Ts与Js的区别众所周知:Jav

    2022年8月20日
    4
  • linux arping命令学习「建议收藏」

    linux arping命令学习「建议收藏」arping命令用来向邻近的主机发生ARPREQUEST数据包。1.arping命令可以用来测试局域网各个主机之间的连通性,不能用于测试其是否能与互联网连通,sh-#pingwww.google.comPINGwww.google.com(74.125.239.147)56(84)bytesofdata.64bytesfromnuq05s02-in-f19

    2022年5月1日
    55
  • centos7可视化桌面_centos安装gcc编译器

    centos7可视化桌面_centos安装gcc编译器7米太阳能路灯价格整套价格多少钱/报价表虽然科技在不断的进步和发展,但是在常规能源缺乏的情况下,人们不得不追求新能源的使用与利用,在我们生活中使用的LED太阳能路灯,就是利用太阳能为其提供能量,从而就减少了一部分能源的浪费。毕竟咱们买了产品之后不是指望着它坏而让售后来修的,那样对大家都不好。所以购买产品一定要看品质。有朋友问到小编说,7米太阳能路灯价格整套价格多少钱/报价表?就此来说要根据实际道路…

    2022年8月27日
    8
  • 免费开源网站源码_内容网站源码

    免费开源网站源码_内容网站源码前言最近想着搭建一个API测试平台,基础的注册登录功能已经完成,就差测试框架的选型,最后还是选择了httprunner,github上已经有很多开源的httprunner测试平台,但是看了下都是基于

    2022年8月7日
    8
  • sql查询数据库中所有表名_使用权和所有权的区别

    sql查询数据库中所有表名_使用权和所有权的区别MySQL中查询所有数据库名和表名;SQLServer中查询所有数据库名和表名;Oracle中查询所有数据库名和表名;

    2022年9月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号