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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 计算机网络————IP地址分类以及网络地址的计算[通俗易懂]

    计算机网络————IP地址分类以及网络地址的计算[通俗易懂]一,IP地址分类 1.二进制与十进制的关系 2,IP地址的地址结构及分类IP地址结构:网络号+主机号网络号:中主机中指明中的所在物理网络的编号主机号:中中中主机在物理网络中的编号 IP地址分类:A类(大型),B类(中型),C类(小型),D类(组播),E类(保留地址-研究时使用) A类地址默认掩码:255.0.0.0/8B类地址默认掩码:2…

  • JS生成随机数的算法

    JS生成随机数的算法关于随机数的过程解释:1>.Math.random()表示生成[0,1)的数,所以Math.random()*5生成的都是[0,4]的随机整数。2>Math.floor(num);参数num为一个数值,函数结果为num的整数部分。3>.Math.round(num);参数num为一个数值,函数结果为num四舍五入后的整数。4>.Math.cei…

  • Java Calendar.MONTH

    Java Calendar.MONTH1、遇到一个大坑,intnowmonth=c.get(Calendar.MONTH)+1;才为真实的月份,需要加1!2、在Java里的数据库查询语言,如果判断的条件是数据库中的Date格式,可以直接用String格式来匹配判断,不需要转换。3、数据库里一个变量增加1可以写Updatename=name+1

  • RIder2021激活码(JetBrains全家桶)「建议收藏」

    (RIder2021激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlS32PGH0SQB-eyJsa…

  • Linux安装JDK1.8(看这一篇就够了) 附安装包下载地址

    文章目录Linux-jdk1.8下载地址1.都要做什么?2.安装2.1创建两个文件夹2.2使用工具上传至Linux服务器2.3解压到install文件夹中3.配置环境变量3.1编辑文件3.2将内容复制到文件中3.3检查是否配置完成3.4更新profile文件3.5重新检查4.切换版本(本地已有jdk时操作,没有请忽略!)Linux-jdk1.8下载地址点击下载jdk1.8-l…

  • MATLAB中提供的线型属性「建议收藏」

    MATLAB中提供的线型属性「建议收藏」MATLAB中提供的线型属性有:线型说明标记符说明颜色说明-实线(默认)+加号符r红色–双划线o空心圆g绿色:虚线*星号b蓝色:.点划线.实心圆c青绿色x叉号符m洋红色s正方形y黄色d菱形k黑色^上

发表回复

您的电子邮箱地址不会被公开。

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