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

本文共 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

你可能感兴趣的文章
PDF.NET数据开发框架 之SQL-MAP使用存储过程
查看>>
如何用eclipse运行导入的maven项目
查看>>
svn服务器安装
查看>>
arya使用流程
查看>>
最近要做的事
查看>>
maven 常用命令
查看>>
Hive-ORC文件存储格式(续)
查看>>
init()和onEnter()方法的区别
查看>>
Android_三种菜单介绍
查看>>
js常用方法之String对象方法扩展
查看>>
sqlserver 三大范式
查看>>
将字符串转化为某种类型
查看>>
一个简单的定时小程序
查看>>
BFS解决POJ 2251
查看>>
jQuery 选择器 复杂查询
查看>>
jquery图片滚动jquery.scrlooAnimation.js
查看>>
Unity3D 基本元素
查看>>
dos
查看>>
SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)...
查看>>
哪里是乐土?--关于团队良性循环
查看>>