U3D协程Coroutine之WWW与Update()的并行测试
生活随笔
收集整理的这篇文章主要介绍了
U3D协程Coroutine之WWW与Update()的并行测试
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
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)也可以实现组合键,对游戏效率影响较小//相机漫游类的操作需要按键每帧或每几帧触发,因此必须使用getkeyif(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);} }
posted on 2016-10-21 19:51 时空观察者9号 阅读(...) 评论(...) 编辑 收藏
与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是生活随笔为你收集整理的U3D协程Coroutine之WWW与Update()的并行测试的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: U3D5.3.5f Monodevelo
- 下一篇: Unity 协程Coroutine综合测