zijian-yang

unity本人自实现了一个协程调用。

只是moveNext()的简单协程调用和封装,这个没什么好说的, 网上例子一大堆。

 

但使用的过程中遇到了几个问题。

1. 自己写的moveNext() 协程不能等待 YieldInstruction 和 CustomYieldInstruction 扩展类。 

  具体原因 猜测是 yield 底层封装好了,固定了实现,并没有把其他的接口暴露出来。

2. 无法等待继承 IEnumerator 在moveNext() 函数里面返回true的协程写法。

  原理  每次IEnumerator.MoveNext() 会自动跳转到上次执行的代码后面。应该是底层记录了上次的执行信息。 

     StartCoroutine在MoveNext()返回true的时候,应该会继续卡在当前位置。(但是并没有清除当前记录信息的接口暴露给我们,所以我们无法清除当前调用信息)。

 

上述的两个问题, 导致自实现的, 只能写简单的


IEnumerator func(){
  ...重复代码
  yield return null;  
}

这样简单的协程。两方都有不方便的地方。 

他自带的协程,基于Monobehaviour,必须保证对象的active 等属性,而且无法定制。复杂的功能,写起来很痛苦。

自己写的话, 代码长,大部分都需要自己造轮子。但是可控, 而且可以加入一些自定义的顺序关系(优先级,id ...)等一系列信息控制。

但反而感觉自己写了个大的TaskManager.Update()的感觉。

相关文章:

  • 2023-01-14
  • 2022-12-23
  • 2022-12-23
  • 2021-09-23
  • 2021-07-05
  • 2022-12-23
  • 2021-12-13
  • 2021-07-07
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-11
  • 2018-10-26
  • 2022-12-23
  • 2021-12-15
相关资源
相似解决方案