让你真正的了解Unity的协程(yield)的工作方式!

携程的yield 是等一帧,然后执行下一句 ,但是不影响其他方法的运行,在停止的时候相当于一个线程。

http://www.xuebuyuan.com/1367145.html

 

代码!

#pragma strict

function Start () 
{
	print("1");
	a();
	b();
	c();
	d();
	print("4");
}

function Update () 
{
	print("5");
}

function a()
{
	print("2");
	yield;		//等一帧
	print("3");
}
function b()
{
	print("7");
	yield;		//等一帧
	yield;		//等一帧
	print("8");
}
function c()
{
	print("9");
	yield;			//等一帧
	print("10");
}
function d()
{
	print("11");
	yield WaitForSeconds(1);	//等一秒
	print("12");
}

 

结果图:

unity 计数器 在协程中性能好还是在update中性能好_调用方法

程序运行,而且又会根据设定的时间来唤醒这条线程,从而达到稍微提升效率的效果,比如说你要写个敌人的AI,写敌人发现玩家的部分,因为要符合人的特性,人不可能很快的做出反应,这个时候你就可以用到它,当然这个功能也能用Update()来实现,但是那个是需要10多行代码来进行计算和判断,而且也不利于维护。

再有一点,就是反应时间的问题,做的AI越像人,那么就应该越符合人的能力,人在某些行为的时候是没有这么快的放映速度的,比如说人睡觉的时候,从背后接近人的时候等等,所以这时候可以4帧或者更长的时间来调用方法来检测,也是很符合实际的,这样照理来说会提升很多性能。

当然如果我说错了,请大神指正哈,我也好及时修正这篇博客,以免继续误导他人哈

 

代码!

#pragma strict

function Start () 
{
	print("1");
	a();
	b();
	c();
	d();
	print("4");
}

function Update () 
{
	print("5");
}

function a()
{
	print("2");
	yield;		//等一帧
	print("3");
}
function b()
{
	print("7");
	yield;		//等一帧
	yield;		//等一帧
	print("8");
}
function c()
{
	print("9");
	yield;			//等一帧
	print("10");
}
function d()
{
	print("11");
	yield WaitForSeconds(1);	//等一秒
	print("12");
}

 

结果图:

unity 计数器 在协程中性能好还是在update中性能好_调用方法

程序运行,而且又会根据设定的时间来唤醒这条线程,从而达到稍微提升效率的效果,比如说你要写个敌人的AI,写敌人发现玩家的部分,因为要符合人的特性,人不可能很快的做出反应,这个时候你就可以用到它,当然这个功能也能用Update()来实现,但是那个是需要10多行代码来进行计算和判断,而且也不利于维护。

再有一点,就是反应时间的问题,做的AI越像人,那么就应该越符合人的能力,人在某些行为的时候是没有这么快的放映速度的,比如说人睡觉的时候,从背后接近人的时候等等,所以这时候可以4帧或者更长的时间来调用方法来检测,也是很符合实际的,这样照理来说会提升很多性能。

当然如果我说错了,请大神指正哈,我也好及时修正这篇博客,以免继续误导他人哈