协程的所能达到的效果就是在指定的时间点上执行需要执行的代码,Unity中开始一个协程的函数是StartCoroutine,而提供的延迟的类有以下几种分别是
new WaitForEndOfFrame; //等待一帧 new WaitForFixedUpdate; //等待一个FixedUpdate(固定时间间隔) new WaitForSeconds; //等待X秒 new WWW; //等待外部资源加载完毕
本文就针对其中的WaitForSeconds实现进行探究。 因为在开发过程中,很多时候会遇到一种情况就是,超时或者是符合某种条件就继续运行,使用系统提供WaitForSeconds已经无法满足要求了,这时候有两种解决方法,一种是使用StopCoroutine来停止协程,但是对于Unity来说,这种行为会造成很大的开销,那么可以采用重写WaitForSeconds,使它能达到我们的要求。以下是我认为的WaitForSeconds的实现:
/// <summary> /// 任务扩展 /// </summary> static class CTaskExtend { static public IEnumerator WaitForSeconds(float second) { DateTime init_dt = DateTime.Now; TimeSpan time; while(true) { time = DateTime.Now - init_dt; if(time.TotalSeconds <= second) { yield return null; } else { break; } } } }
yield return CTaskExtend.WaitForSeconds(delayTime);
/// <summary> /// 任务扩展 /// </summary> static class CTaskExtend { public delegate bool CondDelegate(); static public IEnumerator WaitForSeconds(float second, CondDelegate cond = null) { DateTime init_dt = DateTime.Now; TimeSpan time; while(true) { time = DateTime.Now - init_dt; if (time.TotalSeconds <= second && !cond()) { yield return null; } else { break; } } } }
【Unity】理解协程的原理1——实现一个自己的WaitForSeconds
原文地址:http://blog.csdn.net/nxshow/article/details/43635897