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

直接下载不显示进度

csharp 复制代码
    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());
        }
    }

显示下载进度

//注册事件的方法

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());
}
相关推荐
nightunderblackcat3 小时前
新手向:Python网络编程,搭建简易HTTP服务器
网络·python·http
Yama1173 小时前
SSL与HTTP概述
网络协议·http·ssl
hnlucky3 小时前
同时部署两个不同版本的tomcat要如何配置环境变量
java·服务器·http·tomcat·web
yqcoder4 小时前
12. 说一下 https 的加密过程
网络协议·http·https
心前阳光8 小时前
Unity WebGL文本输入
unity·游戏引擎·webgl
天涯过客TYGK9 小时前
unity A星寻路
unity·游戏引擎
KhalilRuan9 小时前
Unity Demo——3D平台跳跃游戏笔记
笔记·游戏·unity·游戏引擎
甘露寺1 天前
HTTP 请求体类型详解:选择最适合的数据提交格式
网络·网络协议·http
ttod_qzstudio1 天前
Unity中使用EzySlice实现模型切割与UV控制完全指南
unity
刘坤151 天前
封装axios二方包
前端·http