lua和U3D中协程的异同

协程的一般概念:在主线程逻辑运行的同时,开启另一段逻辑处理,以辅助主程序的执行。

(一)首先说下unity中的协程。

调用方法如下:

public Coroutine StartCoroutine(IEnumerator routine);

public Coroutine StartCoroutine(string methodName, [DefaultValue("null")] object value);

public Coroutine StartCoroutine(string methodName);

停用的方法对应如下:

public void StopCoroutine(IEnumerator routine);

public void StopCoroutine(Coroutine routine);

public void StopCoroutine(string methodName);

public void StopAllCoroutines();

 

停用的方法这有个坑,请大家注意:

比如调用的协程方法是Test();

StartCoroutine("Test");

StopCoroutine("Test");

这么调用时可以的。

 

以下方式调用时不可以的:

StartCoroutine(Test());

StopCoroutine(Test());

 

必须通过以下方式调用才能停止
IEnumerator testEnumerator = Test();

StopCoroutine(testEnumerator);

或者是

Coroutine testCoroutine;

StopCoroutine(testCoroutine);

这么调用才行。

 

其中要说明的是StopAllCoroutines,这个函数只能停止继承MonoBehaviour的那个类中的协程。

 

(二)下面说下Lua中的协程:

lua中的协程有三个状态:挂起态、运行态、停止态,当我们创建了一个协同程序时,起始状态为挂起态。也就是说创建了一个协程后,它不会自动运行。

 

我们需要主动的调用一个方法来启动创建的协程。

比如说:

创建了一个协程:

co = coroutine.create(function ()

          print("hello kitty");

end)

 

然后启用这个协程, coroutine.resume(co);

我们可以通过coroutine.status(co),来获取当前协程的状态。比如:
print(coroutine.stsatus(so);

打印状态为:suspended(挂起)

coroutine.resume(co);

状态为:dead

 

 

下面我们说下,lua中协程的大招:yield函数,它主要作用就是将正在运行的代码挂起。

比如:

 

co = coroutine.create(function()

for i = 1, 10 do

print(i);

coroutine.yield();

end

end

 

运行程序,打印出1,然后程序被挂起。

然后调用coroutine.resume(co);

打印信息为2。又被挂起。直到条件终止。

 

当协程状态处于dead也就是终止状态后, 如果我们在启用它,resume将返回false和错误信息。

false cannot resume dead coroutine


原文:https://blog.csdn.net/Nice_66/article/details/81213870 
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值