日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

U3D协程Coroutine之WWW与Update()的并行测试

發布時間:2025/3/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()的并行测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。