Unity3d之协程自实现测试
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之协程自实现测试的更多相关文章
- Unity3D之协程(Coroutines & Yield )
在Unity中StartCoroutine/yield return这个模式到底是怎么应用的? 比如你要一个方法进行一个比较耗时的复杂运算~同时又想让脚本流畅的进行其他操作而不是卡在那里等该方法执行完 ...
- unity3D中协程和线程混合
这是我google unity3D一个问题偶然发现的在stackflow上非常有趣的帖子: 大意是 要在unity3D上从server下载一个zip,并解压到持久化地址.并将其载入到内存中.以下展示了 ...
- Unity3d 通过协程来实现文件的全部加载后执行
相信大家会经常遇到在游戏中需要WWW从本地或者服务器上获取数据,而我们通常容易会犯下面这种个错误:当数据较少或者网速较好时程序运行正常.而当数据较大或者网速不好时程序会出错误.比如卡住. 所以我们要使 ...
- python 协程 gevent 简单测试
串行测试 from gevent import monkey; monkey.patch_all()#有IO才做时需要这一句 import gevent import requests,time st ...
- Unity3d 协程的注意问题(新手须注意,老手须加勉)
关于unity3d的协程,非常的好用,比如等待几秒执行,等待下一帧执行等! 但是也有潜在的问题: 1.协程是单线程的,在主线程中完成 2.如果发现yield, 那么这一帧会结束,那么等下一帧调用此脚本 ...
- Unity3D协程yield的理解
Unity3D的协程概括地将就是:对于一段程序,你可以加上yield标明哪里需要暂停,然后在下一帧或者一段时间后,系统会继续执行这段代码.协程的作用:①延迟一段时间执行代码.②等某个操作完成之后再执行 ...
- Unity3D中的线程与协程
线程 Unity3D是以生命周期主线程循环进行游戏开发. Unity3D中的子线程无法运行Unity SDK(开发者工具包,软件包.软件框架)跟API(应用程序编程接口,函数库). 限制原因:大多数游 ...
- unity协程coroutine浅析
转载请标明出处:http://www.cnblogs.com/zblade/ 一.序言 在unity的游戏开发中,对于异步操作,有一个避免不了的操作: 协程,以前一直理解的懵懵懂懂,最近认真充电了一下 ...
- python--gevent协程及协程概念
何为协程 协程,又称微线程.英文名Coroutine. 协程最大的优势就是协程极高的执行效率.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的 ...
随机推荐
- 转 : net use的使用
老是忘了 net use 怎么样,今天在网上找一篇,贴在这,感谢原作者分享. 1 查看远程主机的共享资源(但看不到默认共享) net view \\IP 2向远程主机复制文件 copy \路径 ...
- LightOJ 1282 Leading and Trailing 数论
题目大意:求n^k的前三位数 和 后三位数. 题目思路:后三位数直接用快速幂取模就行了,前三位则有些小技巧: 对任意正数都有n=10^T(T可为小数),设T=x+y,则n=10^(x+y)=10^x* ...
- hdu 5532
input 1<=T<=2000 2<=n<=10e5 a1 a2 ... an 1<=ai<=10e5 最多二十个n>1000 output 能否从数组中移 ...
- linux视频学习(简单介绍)20160405
看一周学会linux系统的学习笔记. 1.linux系统是一个安全性高的开源,免费的多用户多任务的操作系统. 2.linux工作分为linux系统管理员,linux程序员(PC上软件开发,嵌入式开发) ...
- ubuntu下安装nagios
第一步安装apache root@root01-virtual-machine:/etc/apache2/conf-available# vi charset.conf 可修改apache服务器的编码 ...
- 网络获取的XML的Pull解析
<?xml version="1.0" encoding="utf-8" ?> - <students> - <student x ...
- MySql数据库基本介绍和基本语法
一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为 ...
- UVA 796 Critical Links (tarjan算法求割边)
这是在kuangbin的题目里看到的,不得不吐槽一下,题目中居然没给出数据范围,还是我自己猜的-本来是一道挺裸的题,但是我wa了好多次,原因就是这里面有两个坑点,1重边特判,2输出时左边必须比右边小. ...
- 设置批量商品优惠、如何修改ZenCart产品显示图片的大小
利用下面的方法,可以实现: 买一送一.买一件第二件5折.买三件优惠10%等功能. 管理页面 - 商品管理 - 价格管理 - (选择商品) - 编辑 - 添加空白折扣. 应用上面的办法,能够完成:买一送 ...
- python中uuid来生成机器唯一标识
摘要: 我们可以使用uuid1的后16位来标识一个机器. # use machine specific uuid, last 16 char will be the same if machine ...