博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
U3D协程Coroutine之WWW与Update()的并行测试
阅读量:7045 次
发布时间:2019-06-28

本文共 2810 字,大约阅读时间需要 9 分钟。

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
(); 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 (0, 2, 0); }}

 

转载于:https://www.cnblogs.com/timeObjserver/p/5985891.html

你可能感兴趣的文章
Entity Framework 6.3 和EF Core 3.0路线图
查看>>
《敏捷时代》作者访谈录
查看>>
Scrum Guides 2017年最新修改
查看>>
Cling旨在提供一款高性能的C++ REPL
查看>>
关于《在Windows与.NET平台上的持续交付实践》的问答录
查看>>
TensorFlow模型的签名推荐与快速上线\n
查看>>
改变的六条规则
查看>>
GitHub是如何改进自身的DNS架构的
查看>>
IntelliJ IDEA 2018.3 新版本发布,支持 Java 12及Spring Boot增强等特性
查看>>
阿里重磅发布大规模图神经网络平台AliGraph,架构算法解读
查看>>
AWS Amplify Console:赋予应用程序快速部署的能力
查看>>
Git漏洞导致攻击者可在用户电脑上运行任意代码
查看>>
书评 —— 《Go语言编程》
查看>>
红帽收购混合云管理提供商NooBaa,混合云爆发节点临近!
查看>>
保持分布式团队同步
查看>>
QCon上海2015盛大开幕
查看>>
Jakarta EE:云原生Java的新平台
查看>>
2018 Node.js用户调查报告显示社区仍然在快速成长
查看>>
WhiteSource推出免费开源的漏洞检查工具
查看>>
聊天机器人已死,为什么腾讯还要打造自己的智能客服?
查看>>