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综合测