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. iOS 基础日记-修饰符

    今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...

  2. IT技术很好的视频网址

    1.华为工程师 带你实战C++ 2.vimoe,国外的,需要FQ哦.https://vimeo.com/85831438

  3. 《慕客网:IOS-动画入门》学习笔记

    新建Cocoa Touch Class,语言是swift 然后继续为界面添加一个普通的View Controller,并且添加前面视图的静态table的转向剪头指向这个View Controller, ...

  4. UVa 108 - Maximum Sum(最大连续子序列)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  5. 【转】Python开发指南:最佳实践精选

    总体原则 价值 “为别人开发你也想要使用的工具.” ——Kenneth Reitz "简洁总是胜过可用." ——Pieter Hintjens "满足90%的使用场景.忽 ...

  6. 回文数 第N个回文数

    判断回文数还是不难,如果能转为字符串就更简单了. 如果是求第N个回文数呢. 12321是一个回文数,这里先考虑一半的情况. 回文数的个数其实是有规律的.如: 1位回文数: 9个 2位回文数: 9个 3 ...

  7. Memcache笔记05-Memcache安全性

    Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以 ...

  8. OOD沉思录 --- 类和对象的关系 --- 包含关系4

    4.9 在实现语义约束时,最好根据类定义来实现.但是这经常会导致泛滥成灾的类,在这种情况下约束应当在类的行为中实现,通常在类的构造函数中实现,但不是必须如此. 还是以汽车为例,我们看汽车的定义,为了集 ...

  9. FPGA speed grade

    Altera的-6.-7.-8速度等级逆向排序,Xilinx速度等级正向排序. 不很严密地说,“序号越低,速度等级越高”这是Altera FPGA的排序方法, “序号越高,速度等级也越高”这是Xili ...

  10. cxf 消息寻址

    一.消息寻址 WS-Addressing是将消息路由数据包含在SOAP头中的一种标准方法.利用WS-Addressing的消息可以在标准化的SOAP头中包含自己的包含发送元数据,而不是依赖于网络层传输 ...