using System.Collections;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI; /************************************************************************/
/* UnityEngine.WWW 下载与Update()的并行测试,UNITY5.35f */
/************************************************************************/
public class wwwTest : MonoBehaviour { WWW www;
IEnumerator Start () { //下载文件是一个RAR,比较大,要下载几分钟才能完成,
//运行发现,下载和Update()并行,游戏正常运行,调试发现创建并使用WWW对象并不会开启新线程
//这说明WWW也是利用协程来实现下载的,如果是这样,下载速度应该会受Update()函数调用频率的影响,经测试发现下载速度并不受影响,不明觉厉
//【补记】在协程函数中使用Thread.sleep(1000)将会卡住主线程,不要在下载时这样用,这样只是在为其它进程节省时间,降低下载速度。
     www = new WWW ("http://psoft.33lc.com:801/small/directxruntimes_x86.rar");
yield return www;//下载开始,直到下载完成才会执行本函数剩余的代码。
     
// Load the object asynchronously
     AssetBundleRequest request = bundle.LoadAssetAsync ("myObject", typeof(GameObject));
     // Wait for completion
     yield return request;//加载完成后才会执行后面的代码
if(www == null){
EditorUtility.DisplayDialog ("", "download stoped", "ok"); yield break;//协程将抛弃后面所有代码
//yield return null; //协程返回后下次回来会执行下面的代码,由于下载失败,下面的操作将出错
}
if(www.isDone){
string info = "download complete";
if (!string.IsNullOrEmpty (www.error))//有些平台上不允许string为null,则这时返回空串"";
//yield return null; //协程返回后下次回来会执行下面的代码,由于下载失败,下面的操作将出错
yield break; EditorUtility.DisplayDialog ("info", info, "ok"); }
else{
EditorUtility.DisplayDialog ("error", "download error", "ok");
yield return null;
} EditorUtility.DisplayDialog ("finally", "end", "ok"); RawImage img = GetComponent<RawImage> (); img.texture = www.texture; } void Update () {
if(Input.GetKeyDown (KeyCode.Space)){
Debug.Log ("is done: " + www.progress); //显示下载进度
}
else if(Input.GetKeyDown (KeyCode.LeftControl)){ if(Input.GetKey (KeyCode.W)){//组合键测试 CTRL + W
// 诡异现象,注意:先按CTRL再W无法进入到这里,先W再CTRL则可以进入到这里。
//GetKeyDown在按键期间只触发一次,且不能再触发其它按键;GetKey在按键期间一直不断触发,且可以同时再触发其它键
//因此两个GetKeyDown(A)&&GetKeyDown(B)不能实现组合键。
//GetKey(A) && GetKey(B)可以实现组合键,对游戏效率影响较大
//GetKeyDown(A) && GetKey(B)也可以实现组合键,对游戏效率影响较小
//相机漫游类的操作需要按键每帧或每几帧触发,因此必须使用getkey
if(EditorUtility.DisplayDialog ("", "你确定要终止下载吗", "ok", "cancel")){
www.Dispose ();
www = null;
}
}
}
if(Input.GetKey (KeyCode.A) && Input.GetKey(KeyCode.B)){
Debug.Log ("A AND B ===============");
} transform.Rotate (, , );
}
}

U3D协程Coroutine之WWW与Update()的并行测试的更多相关文章

  1. Unity协程(Coroutine)管理类——TaskManager工具分享

    博客分类: Unity3D插件学习,工具分享 源码分析   Unity协程(Coroutine)管理类——TaskManager工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处 ...

  2. Unity 协程Coroutine综合测试

    using UnityEngine; using System.Collections; using System.Text; public class rotCube : MonoBehaviour ...

  3. (zt)Lua的多任务机制——协程(coroutine)

    原帖:http://blog.csdn.net/soloist/article/details/329381 并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制.大致上 ...

  4. 协程coroutine

    协程(coroutine)顾名思义就是“协作的例程”(co-operative routines).跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程 ...

  5. qemu核心机制分析-协程coroutine

    关于协程coroutine前面的文章已经介绍过了,本文总结对qemu中coroutine机制的分析,qemu 协程coroutine基于:setcontext函数族以及函数间跳转函数siglongjm ...

  6. Lua的多任务机制——协程(coroutine)

    并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制.大致上有这么两种多任务技术,一种是抢占式多任务(preemptive multitasking),它让操作系统来决定 ...

  7. Python并发编程协程(Coroutine)之Gevent

    Gevent官网文档地址:http://www.gevent.org/contents.html 基本概念 我们通常所说的协程Coroutine其实是corporate routine的缩写,直接翻译 ...

  8. Unity协程Coroutine使用总结和一些坑

    原文摘自 Unity协程Coroutine使用总结和一些坑 MonoBehavior关于协程提供了下面几个接口: 可以使用函数或者函数名字符串来启动一个协程,同时可以用函数,函数名字符串,和Corou ...

  9. 【Unity】协程Coroutine及Yield常见用法

    最近学习协程Coroutine,参考了别人的文章和视频教程,感觉协程用法还是相当灵活巧妙的,在此简单总结,方便自己以后回顾.Yield关键字的语意可以理解为“暂停”. 首先是yield return的 ...

随机推荐

  1. C标准库<signal.h>实现

    本文地址:http://www.cnblogs.com/archimedes/p/c-library-signal.html,转载请注明源地址. 背景知识 signal.h是C标准函数库中的信号处理部 ...

  2. 本地预览图片html和js例子

    本地预览图片html和js例子,直接上代码吧. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  3. iOS多线程邂逅

    .线程之间的通信 //有一个特别耗时的操作,比如说网络请求,开启子线程去请求网络,我们一般是要在主线程更新UI,如何从子线程跳转到主线程? #import "ViewController.h ...

  4. windows phone(成语典籍游戏开发)

  5. c语言的简易日历

    用c语言编写的简易日历,代码如下: #include <stdio.h> int main(int argc, const char * argv[]) { // insert code ...

  6. Erlang数据类型的表示和实现(4)——boxed 对象

    Boxed 对象 Boxed 对象是比较复杂的对象,在 Erlang 中主标签为 10 的 Eterm 表示一个对 boxed 对象的引用.这个 Eterm 除去标签之后剩下的实际上是一个指针,指向具 ...

  7. 《第一行代码——Android》

    <第一行代码——Android> 基本信息 作者: 郭霖 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115362865 上架时间:2014-7-14 出版日期:2014 ...

  8. java web项目自动部署到Tomcat的原因

    关于eclipse中MAVEN WEB工程中编译问题 这几天是被java的环境搞疯了,我先是搭了一个spring+springmvc+mybatis的工程,在家里跑了一下,没有问题,把工程带到公司里用 ...

  9. device eth0 does not seem to be present, delaying initialization

    在搭建LVS+Keepalived高可用负载均衡环境的过程中,使用VirtualBox复制了两个Centos的环境,并且选中了“重新初始化网卡”的选项,但是在启动这两个复制的Centos环境的时候,发 ...

  10. Apache CXF自定义拦截器

    为什么设计拦截器?1.为了在webservice请求过程中,能动态操作请求和响应数据,CXF设计了拦截器 拦截器分类: 1.按所处的位置分:服务器端拦截器,客户端拦截器. 2.按消息的方向分:入拦截器 ...