• unity unityWebRequest 通过http下载服务器资源


    直接下载不显示进度

        private void OnDownloadAssets()//下载资源
        {
            StartCoroutine(DownloadFormServer_IE(url, savePath));
        }
    
        //其他方法
        private IEnumerator DownloadFormServer_IE(string url, string path)//从服务器下载资源
        {
            Debug.Log("正在下载" + url);
            UnityWebRequest request = UnityWebRequest.Get(url);
            
            //直接下载不显示进度
            yield return request.SendWebRequest();
    
            if (request.result== UnityWebRequest.Result.ProtocolError || request.result== UnityWebRequest.Result.ConnectionError)
            {
                Debug.Log(request.responseCode);
                Debug.Log(request.ersror);
                  yield break;
            }
            DownloadHandler downloadHandler = request.downloadHandler;
            if (!downloadHandler.isDone)
            {
                Debug.Log("正在下载");
                yield return downloadHandler;
            }
            else
            {
                Debug.Log("下载完成");
                byte[] data = request.downloadHandler.data;
                using (FileStream fs = new FileStream(path, FileMode.Create))
                {
                    fs.Write(data, 0, data.Length);
                }
                this.SendEvent(new OnFinishDownloadOneAsset_AssetsManager());
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    显示下载进度
    //注册事件的方法
    private void OnDownloadAssets()//下载资源
    {
    GameController.Instance.StartCoroutine(DownloadFormServer_IE(url, savePath));
    }

    //其他方法
    private IEnumerator DownloadFormServer_IE(string url, string path)//从服务器下载资源
    {
        Debug.Log("正在下载" + url);
        UnityWebRequest request = UnityWebRequest.Get(url);
    
        //显示下载进度和速度
        request.SendWebRequest();
        if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError)
        {
            Debug.Log(request.responseCode);
            Debug.Log(request.error);
            yield break;
        }
        while (!request.isDone)
        {
           //下载速度
            string netSpeedStr = "0kb";
            if (request.downloadHandler != null && request.downloadHandler.data != null)
            {
                float speed = request.downloadHandler.data.Length / 1024;
                if (speed > 1024)
                {
                    speed = (speed / 1024);
                    netSpeedStr = speed.ToString("f") + "mb";                
                }
                else
                { 
                    netSpeedStr = speed + "kb";                
                }
            }
            //下载进度 和速度
            Debug.Log("进度" + (request.downloadProgress*100).ToString("f") + "%  "+ netSpeedStr );
            yield return null;
        }
    
        DownloadHandler downloadHandler = request.downloadHandler;
        Debug.Log("下载完成");
        byte[] data = request.downloadHandler.data;
        using (FileStream fs = new FileStream(path, FileMode.Create))
        {
            fs.Write(data, 0, data.Length);
        }
        this.SendEvent(new OnFinishDownloadOneAsset_AssetsManager());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
  • 相关阅读:
    Servlet的运行图解和生命周期
    SMU可以供电的同时测量电流和电压
    Android多线程学习:线程池(二)
    MYSQL---基础篇
    神经网络梯度是什么意思,神经网络梯度公式推导
    el-input设置max、min无效的解决方案
    shell编程
    C语言 cortex-A7核 按键中断 实验【重点】
    远程代码执行渗透测试—Server2128
    源码学习之MyBatis的底层查询原理
  • 原文地址:https://blog.csdn.net/weixin_44568736/article/details/134436625