using UnityEngine;
using System.Collections; public class TestStartCoroutine : MonoBehaviour
{
IEnumerator m_etor;
bool m_moveNext;
MyWaitForSeconds m_waiter; #region MyRegion class MyWaitForSeconds
{
int m_seconds;
float m_timer; public MyWaitForSeconds(int seconds)
{
m_seconds = seconds;
m_timer = 0;
} public bool Update(float deltaTime)
{
m_timer += deltaTime;
return m_timer >= m_seconds;
}
} #endregion void Start()
{
MyStartCoroutine(T1());
} public void MyStartCoroutine(IEnumerator etor)
{
m_etor = etor;
m_moveNext = true;
} IEnumerator T1()
{
Debug.Log("#1"); int i = 0;
while (i++ < 60)
{
Debug.Log("#2 " + i);
yield return null;
} Debug.Log("#3"); yield return new MyWaitForSeconds(3); Debug.Log("#4");
} void Update()
{
if (m_moveNext)
{
if (!m_etor.MoveNext())
m_moveNext = false;
else if (m_etor.Current is MyWaitForSeconds)
{
m_waiter = (MyWaitForSeconds)m_etor.Current;
m_moveNext = false;
}
} if (m_waiter != null)
{
if (m_waiter.Update(Time.deltaTime))
{
m_waiter = null;
m_moveNext = true;
}
}
}
}

  Unity3d的协程是利用枚举器来实现的,我猜可能是跟以上测试代码一样,在一帧里让枚举器的指针加1,从而可以等待1帧。

Unity3d之协程自实现测试的更多相关文章

  1. Unity3D之协程(Coroutines & Yield )

    在Unity中StartCoroutine/yield return这个模式到底是怎么应用的? 比如你要一个方法进行一个比较耗时的复杂运算~同时又想让脚本流畅的进行其他操作而不是卡在那里等该方法执行完 ...

  2. unity3D中协程和线程混合

    这是我google unity3D一个问题偶然发现的在stackflow上非常有趣的帖子: 大意是 要在unity3D上从server下载一个zip,并解压到持久化地址.并将其载入到内存中.以下展示了 ...

  3. Unity3d 通过协程来实现文件的全部加载后执行

    相信大家会经常遇到在游戏中需要WWW从本地或者服务器上获取数据,而我们通常容易会犯下面这种个错误:当数据较少或者网速较好时程序运行正常.而当数据较大或者网速不好时程序会出错误.比如卡住. 所以我们要使 ...

  4. python 协程 gevent 简单测试

    串行测试 from gevent import monkey; monkey.patch_all()#有IO才做时需要这一句 import gevent import requests,time st ...

  5. Unity3d 协程的注意问题(新手须注意,老手须加勉)

    关于unity3d的协程,非常的好用,比如等待几秒执行,等待下一帧执行等! 但是也有潜在的问题: 1.协程是单线程的,在主线程中完成 2.如果发现yield, 那么这一帧会结束,那么等下一帧调用此脚本 ...

  6. Unity3D协程yield的理解

    Unity3D的协程概括地将就是:对于一段程序,你可以加上yield标明哪里需要暂停,然后在下一帧或者一段时间后,系统会继续执行这段代码.协程的作用:①延迟一段时间执行代码.②等某个操作完成之后再执行 ...

  7. Unity3D中的线程与协程

    线程 Unity3D是以生命周期主线程循环进行游戏开发. Unity3D中的子线程无法运行Unity SDK(开发者工具包,软件包.软件框架)跟API(应用程序编程接口,函数库). 限制原因:大多数游 ...

  8. unity协程coroutine浅析

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.序言 在unity的游戏开发中,对于异步操作,有一个避免不了的操作: 协程,以前一直理解的懵懵懂懂,最近认真充电了一下 ...

  9. python--gevent协程及协程概念

    何为协程 协程,又称微线程.英文名Coroutine. 协程最大的优势就是协程极高的执行效率.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的 ...

随机推荐

  1. setTranslucent

    在ios7中 如果setTranslucent=yes 默认的   则状态栏及导航栏底部为透明的,界面上的组件应该从屏幕顶部开始显示,因为是半透明的,可以看到,所以为了不和状态栏及导航栏重叠,第一个组 ...

  2. Sublime console installation instructions install Package Control

    instructions: import urllib2,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1 ...

  3. java方法:flush()

    flush本意是冲刷,这个方法大概取自它引申义冲马桶的意思,马桶有个池子,你往里面扔东西,会暂时保存在池子里,只有你放水冲下去,东西才会进入下水道. 同理很多流都有一个这样的池子,专业术语叫缓冲区,当 ...

  4. Too Much Money

    Too Much Money time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  5. Day02——widow对象

    window - 计时器 1、setTimeout()可以用来在指定的时间之后单次调用函数. setTimeount(f,1000);//一秒后调用函数f clearTimeout();取消函数的执行 ...

  6. POJ1308 Is It A Tree?

    题目大意:和HDU1272-小希的迷宫题目一样, 如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径 ...

  7. 修改apache配置文件去除thinkphp url中的index.php

    例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://localhost/test/index/add如何去掉index. ...

  8. 下拉刷新和上拉加载 Swift

    转载自:http://iyiming.me/blog/2015/07/05/custom-refresh-and-loading/ 关于下拉刷新和上拉加载,项目中一直使用MJRefresh(原先还用过 ...

  9. UIImage+Scale

    Scale a UIImage to any given rect keeping the aspect ratio Raw  UIImage+Scale.m   @implementation UI ...

  10. linux 显示文件或文件夹

    用 -v 很简单呀! 显示文件 ls -l | grep -v '^d'显示目录 ls -l | grep '^d'