untiy使用http下载资源

文章目录

提醒

部分API需要将Unity的 Edit/PrejectSetting/Player/OtherSetttings/AConfiguration/ApiCompatibilityLevel 设为.NetFramework 才可以使用

下载一个资源并保存到本地

csharp 复制代码
    private IEnumerator DownloadFormServer_IE(string url, string path)//从服务器下载资源  path保存路径
    {
        Debug.Log("正在下载" + url);	
        string assetName = Path.GetFileName(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 totalDownloadDataStr = "0kb";//总下载量 不是下载速度,可以根据总下载量计算下载速度
            if (request.downloadHandler != null && request.downloadHandler.data != null)
            {
                float speed = request.downloadHandler.data.Length / 1024;
                if (speed > 1024)
                {
                    speed = (speed / 1024);
                    totalDownloadDataStr = speed.ToString("f") + "mb";                
                }
                else
                { 
                    totalDownloadDataStr = speed + "kb";                
                }
            }
            //打开一个面板显示下载进度条 UIKit是QF框架提供的API
            UIKit.OpenPanel<AlertPanel>(new AlertPanelData(
                "正在下载" + assetName + "\n"
                + "进度" + (request.downloadProgress*100).ToString("f") + "%  "+ totalDownloadDataStr + "\n"
                + "第" + (assetsManagerModel.currentDownlaodFinishIndex + 1) + "\\总共" + assetsManagerModel.waitDownloadAssetsList.Count
                ));
            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);
        }
    }

下载一张图片

csharp 复制代码
    private IEnumerator DownloadOnePicture_IE(string url, Action<Texture2D> callBack)//在callBack里可以直接对下载的图片进行例如给精灵赋值这类操作
    {
        if (string.IsNullOrEmpty(url)) yield break;
        UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
        yield return request.SendWebRequest();
        Texture2D texture2D = DownloadHandlerTexture.GetContent(request);
        callBack?.Invoke(texture2D);
    }
相关推荐
WarPigs10 小时前
游戏签到系统
unity
小拉达不是臭老鼠12 小时前
Unity中的UI系统之UGUI
学习·ui·unity
万兴丶12 小时前
Coplay适用于 Unity 的“Al 代理”使用指南
unity·游戏引擎·ai编程
魔士于安15 小时前
Unity材质球大合集
unity·游戏引擎·材质
mxwin17 小时前
Unity Shader 冰面 Shader 制作原理与流程
unity·游戏引擎·shader
小拉达不是臭老鼠18 小时前
Unity中的UI系统之UGUI_登陆面板实现
ui·unity
郝学胜-神的一滴19 小时前
[简化版 GAMES 101] 计算机图形学 11:频域·卷积·抗锯齿
c++·unity·图形渲染·opengl·three·unreal
元气少女小圆丶1 天前
SenseGlove Nova 2+Unity开发笔记2
笔记·unity·游戏引擎
想不明白的过度思考者2 天前
Unity学习笔记——虚拟摇杆实现笔记(事件触发器的使用、UGUI 坐标转换)
笔记·学习·unity
魔士于安2 天前
unity volumefog带各种demo第一人称 wsad 穿墙控制
游戏·unity·游戏引擎·贴图·模型