注:需要了解C#的迭代器,不然很难理解。
之前面试有被问到unity协程的原理,以及撇开unity用纯C#去实现协程的方法。后来了解一下,确实可以的。趁这会有空,稍微总结一下。
还是结合代码说事吧:
1 /// <summary>
2 /// 等待接口
3 /// </summary>
4 public interface IWait
5 {
6 /// <summary>
7 /// 每帧检测是否等待结束
8 /// </summary>
9 /// <returns></returns>
10 bool Tick();
11 }
先定义一个等待接口,WaitForSeconds 和 WaitForFrames 实现接口的Tick()方法,每一帧调用Tick()方法检测是否等待结束
1 /// <summary> 2 /// 按秒等待 3 /// </summary> 4 public class WaitForSeconds:IWait 5 { 6 float _seconds = 0f; 7 8 public WaitForSeconds(float seconds) 9 { 10 _seconds = seconds; 11 } 12 13 public bool Tick() 14 { 15 _seconds -= Time.deltaTime; 16 return _seconds <= 0; 17 } 18 }