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 视频播放 - YVideoPlayer - UIView
这是一个使用简便的视频播放框架,它基于UIView,它可以是一个小窗口,也可以是一个全屏的窗口 简单的方式加载Video框架: 一行代码加载! 一行代码更新! 下载链接 : https://githu ...
- 递归练习(C语言)
本文地址:http://www.cnblogs.com/archimedes/p/recursive-practice.html,转载请注明源地址. 1.炮弹一样的球状物体,能够堆积成一个金字塔,在顶 ...
- iOS 内存管理(一)之基础知识介绍
1,什么是引用计数 所有OC对象都有一个计数器,叫做引用计数,引用计数就是目前有几个对象在使用该对象(持有该对象的引用): 2,什么是对象所有权 A对象拥有B对象的引用,A对象拥有B对象的所有权: 3 ...
- 我为什么用 SQLite 和 FMDB 而不用 Core Data
凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...
- Mac显示隐藏文件的终端命令
显示:defaults write com.apple.finder AppleShowAllFiles -bool true隐藏:defaults write com.apple.finder Ap ...
- 开源项目go2o - golang版的o2o项目
发一个github上唯一用golang实现的o2o项目 What's Go2o Golang combine simple o2o DDD domain-driven design realizati ...
- Erlang 程序引发共享内存 bug 的一个例子
虽然 Erlang 的广告说得非常好,functional.share-nothing.消息传递,blah blah 的,好像用 Erlang 写并发程序就高枕无忧了,但是由于 Erlang 信奉高度 ...
- ajaxFileUpload文件上传
一.简介 ajaxFileUpload是一种异步的文件上传控件,通过ajax进行文件上传,并获取上传处理结果.在很多时候我们需要使用到文件上传的功能,但是不需要使用那些强大的上传插件.此时就可以使用a ...
- javascript图片库
将图片发布到网上的办法很多,可以简单地把所有图片都放在一个网页中,但是会导致这个网页过于庞大.为每张图片分别创建一个网页的解决办法值得考虑,但是制作过程需要花费非常多的时间和精力. 如果想要两全其美, ...
- 将HTML特殊转义为实体字符的两种实现方式
前端开发工作中,经常需要将HTML的左右尖括号等转义成实体形式.我们不能把<,>,&等直接显示在最终看到的网页里.需要将其转义后才能在网页上显示. 转义字符(Escape Sequ ...