当前位置: 首页 > article >正文

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());
        }
    }

显示下载进度
//注册事件的方法
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());
}

http://www.kler.cn/a/132887.html

相关文章:

  • 006.精读《Apache Paimon Docs - Concepts》
  • 要查看你的系统是 x64(64位)还是 x86(32位),可以按照以下步骤操作
  • 计算机网络WebSocket——针对实习面试
  • 图形几何之美系列:二维凸包艺术赏析
  • 一文说清C++类型转换操作符(cast operator)
  • Spring Cloud Eureka 服务注册与发现
  • Mysql -常见函数
  • 人生阶段总结
  • 2023年11月11日~11月17日周报(基于matlab生成模拟数据、批量修改文件名、重写dataset)
  • 所见即所得的动画效果:Animate.css
  • 梦想编织者——Adobe Dreamweaver
  • 基于模拟退火算法优化概率神经网络PNN的分类预测 - 附代码
  • 无重复最长字符串(最长无重复子字符串),剑指offer,力扣
  • spark性能调优 | 默认并行度
  • ROS 学习应用篇(七)ROS中的坐标变换管理之tf初探
  • Zabbix5.0部署及应用
  • 教你轻松解决win系统ucrtbased.dll丢失的问题,亲测有效!
  • kafka入门(一):kafka消息消费
  • 若依中脱敏
  • C#WPF文本转语音实例
  • 人工智能发展前景
  • Flutter 应用启动从闪屏页短暂黑屏再到第一个页面
  • 超全整理,Pytest自动化测试框架-多进程(pytest-xdist)运行总结...
  • Web前端—移动Web第一天(平面转换、渐变、综合案例--播客网页设计)
  • 计算机网络八股文
  • 十三、Docker的安装