Unity3d下载大型文件并显示进度
生活随笔
收集整理的這篇文章主要介紹了
Unity3d下载大型文件并显示进度
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于WWW.progress在安卓上進度一直顯示是0,所以只得自己動手寫下載函數了。結合網上同行的代碼,加上自己修改,總算完成了。
public class ItemScript : MonoBehaviour { string prompt = "ss";void OnApplicationQuit(){ StopAllCoroutines();//關閉所有協程}void OnDestroy(){if(request != null){//以下步驟很重要,用戶中止時,放棄請求,如果不放棄,連續多次請求,就會出現卡死。request.Abort();UnityEngine.Debug.Log("request.Abort();");} }//輸出進度信息void output (string strInfo) {GameObject TextRect = GameObject.Find("Canvas/Panel/ProgressBackGround/ProgressRect/ProgressText");if(TextRect != null){Text ProgressText = (Text)TextRect.GetComponent<Text>();ProgressText.text = UserHelp.AddColorAttr(strInfo);}}//點擊按鈕“開始下載”public void OnClickRescourceItem(){ string strTmpFile = "C:/tmp/downloading.srt";//臨時文件if (System.IO.File.Exists(strTmpFile)){File.Delete(strTmpFile);}//打開進度顯示面板GameObject bg = GameObject.Find("Canvas/Panel").transform.Find("ProgressBackGround").gameObject;bg.SetActive(true);//開始異步下載StartCoroutine(DownloadFunction("http://localhost/test.jpg", "C:/UnityDownload/test.jpg")); }System.Net.HttpWebRequest request;IEnumerator DownloadFunction(string uri,string saveFile){//刪除本地臨時文件string strTmpFile = "C:/tmp/downloading.srt";if (System.IO.File.Exists(strTmpFile)){File.Delete(strTmpFile);}//打開網絡連接 request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(uri);request.Timeout = 5000;//獲取臨時文件大小,注意,不要再創建request,連續請求可能卡死,開啟下次請求前請先結束上一次的請求。//重要的事說三遍:不要連續請求!不要連續請求!不要連續請求!long countLength = request.GetResponse().ContentLength;//打開上次下載的文件或新建文件 long lStartPos = 0;System.IO.FileStream fs;fs = new System.IO.FileStream(strTmpFile, System.IO.FileMode.Create);if (lStartPos > 0){request.AddRange((int)lStartPos); //設置Range值print(lStartPos);}//向服務器請求,獲得服務器回應數據流 System.Net.WebResponse res = request.GetResponse();System.IO.Stream ns = res.GetResponseStream();int len = 1024 * 8;byte[] nbytes = new byte[len];int nReadSize = 0;nReadSize = ns.Read(nbytes, 0, len);while (nReadSize > 0){fs.Write(nbytes, 0, nReadSize);nReadSize = ns.Read(nbytes, 0, len);double dDownloadedLength = fs.Length * 1.0 / (1024*1024);double dTotalLength = countLength * 1.0 / (1024*1024);prompt = string.Format("已下載 {0:F}M / {1:F}M", dDownloadedLength, dTotalLength);output(prompt);yield return false;}ns.Close();fs.Close();//下載完成重命名FileInfo fi = new FileInfo(strTmpFile);fi.MoveTo(saveFile);File.Delete(strTmpFile);//關閉進度面板GameObject bg = GameObject.Find("Canvas/Panel").transform.Find("ProgressBackGround").gameObject;bg.SetActive(false);} }總結
以上是生活随笔為你收集整理的Unity3d下载大型文件并显示进度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【TA】Unity角色二次元风格渲染
- 下一篇: 第149章 SQL函数 TRIM