U3D协程Coroutine之WWW与Update()的并行测试
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()的并行测试的更多相关文章
- Unity协程(Coroutine)管理类——TaskManager工具分享
博客分类: Unity3D插件学习,工具分享 源码分析 Unity协程(Coroutine)管理类——TaskManager工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处 ...
- Unity 协程Coroutine综合测试
using UnityEngine; using System.Collections; using System.Text; public class rotCube : MonoBehaviour ...
- (zt)Lua的多任务机制——协程(coroutine)
原帖:http://blog.csdn.net/soloist/article/details/329381 并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制.大致上 ...
- 协程coroutine
协程(coroutine)顾名思义就是“协作的例程”(co-operative routines).跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程 ...
- qemu核心机制分析-协程coroutine
关于协程coroutine前面的文章已经介绍过了,本文总结对qemu中coroutine机制的分析,qemu 协程coroutine基于:setcontext函数族以及函数间跳转函数siglongjm ...
- Lua的多任务机制——协程(coroutine)
并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制.大致上有这么两种多任务技术,一种是抢占式多任务(preemptive multitasking),它让操作系统来决定 ...
- Python并发编程协程(Coroutine)之Gevent
Gevent官网文档地址:http://www.gevent.org/contents.html 基本概念 我们通常所说的协程Coroutine其实是corporate routine的缩写,直接翻译 ...
- Unity协程Coroutine使用总结和一些坑
原文摘自 Unity协程Coroutine使用总结和一些坑 MonoBehavior关于协程提供了下面几个接口: 可以使用函数或者函数名字符串来启动一个协程,同时可以用函数,函数名字符串,和Corou ...
- 【Unity】协程Coroutine及Yield常见用法
最近学习协程Coroutine,参考了别人的文章和视频教程,感觉协程用法还是相当灵活巧妙的,在此简单总结,方便自己以后回顾.Yield关键字的语意可以理解为“暂停”. 首先是yield return的 ...
随机推荐
- IOS 瀑布流UICollectionView实现
IOS 瀑布流UICollectionView实现 在实现瀑布流之前先来看看瀑布流的雏形(此方法的雏形 UICollectionView) 对于UICollectionView我们有几点注意事项 它和 ...
- OC第一讲:类和对象
今天终于开始进行OC的学习了 一.首先讲了NSLog NSLog是oc里面的输出语句,其用法和printf差不多,但是还是有差别的 1,NSLog是自动换行的,不用像printf那样还需要加'\n': ...
- Swift 中的函数
学习来自<极客学院:Swift中的函数> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 练习一: import Foundation //函数 ...
- android 之 桌面的小控件AppWidget
AppWidget是创建的桌面窗口小控件,在这个小控件上允许我们进行一些操作(这个视自己的需要而定).作为菜鸟,我在这里将介绍一下AppWeight的简单使用. 1.在介绍AppWidget之前,我们 ...
- Informatica Powercenter学习笔记
LOOKUP TRANSFORMATION的使用点评: LOOKUP基本用法不熟的话请参考下附属信息. 用法感受: 1 LOOKUP的作用跟我们以前在EXCEL的函数功能类似,就是隔表取值.优点就是用 ...
- nginx 与 lua 开发环境搭建
首先下载最新版的 相关软件 的安装文件. nginx: http://nginx.org/en/download.html LuaJIT: http://luajit.org/download.htm ...
- IdentityHashMap的使用场景
IdentityHashMap的使用场景 JDK1.4就加入了这个map类型,它是使用 == 判断相等,而不是hashmap的equals方法判断相等. 那么,它有什么应用场合呢? 当然是需要我们必须 ...
- Python Memcached Script
介绍 利用 python 书写了 memcached 的启动等一类操作 尽量的实现脚本的复用性,以及脚本的可扩展性,已达到一劳永逸的效果, 并且添加了 memcached 监控搭建 memcached ...
- Git :fatal: 错误提示解决办法
1-fatal: remote origin already exists. 1.先 $ git remote rm origin 2.再 $ git remote add origin git@g ...
- ASP.NET发布网站遇到的几个问题
环境背景 操作系统:Win7 开发工具:Visual Studio 2013 Framework: Framework 4.0 Issue1: 无法识别的属性“targetFramework” 解决方 ...