下面是一个示例代码,演示如何使用UnityWebRequest进行断点下载,并显示下载进度:

using UnityEngine;
using UnityEngine.Networking;

public class DownloadManager : MonoBehaviour
{
    private UnityWebRequest webRequest;
    private string url;
    private string savePath;

    private void Start()
    {
        url = 'http://example.com/file.zip';
        savePath = Application.persistentDataPath + '/file.zip';

        StartCoroutine(DownloadFile());
    }

    private IEnumerator DownloadFile()
    {
        webRequest = UnityWebRequest.Get(url);

        // 检查之前是否已经下载了一部分,如果是,设置Range头部
        long fileSize = GetFileSize(savePath);
        if (fileSize > 0)
        {
            webRequest.SetRequestHeader('Range', $'bytes={fileSize}-');
        }

        // 发起请求
        yield return webRequest.SendWebRequest();

        if (webRequest.isNetworkError || webRequest.isHttpError)
        {
            Debug.LogError($'下载文件失败:{webRequest.error}');
        }
        else
        {
            // 保存文件
            byte[] data = webRequest.downloadHandler.data;
            SaveFile(savePath, data);
        }

        webRequest.Dispose();
    }

    private void SaveFile(string path, byte[] data)
    {
        System.IO.File.WriteAllBytes(path, data);
    }

    private long GetFileSize(string path)
    {
        long fileSize = 0;
        if (System.IO.File.Exists(path))
        {
            fileSize = new System.IO.FileInfo(path).Length;
        }
        return fileSize;
    }

    private void Update()
    {
        if (webRequest != null && webRequest.downloadProgress > 0)
        {
            Debug.Log($'当前下载进度:{webRequest.downloadProgress:P2}');
        }
    }
}

在上面的示例中,我们首先获取要下载的文件的URL和保存路径,然后在Start方法中启动协程DownloadFile()来进行文件下载。

DownloadFile方法中,我们首先检查之前是否已经下载了一部分,如果是,就设置Range头部,以便从上次下载的位置继续下载。然后发起请求,等待请求结束。

请求结束后,我们检查是否有网络或HTTP错误,如果没有则保存文件到指定的路径。

Update方法中,我们检查webRequest是否存在且下载进度大于0,如果是,则输出当前下载进度。

通过这个示例,你可以了解如何使用UnityWebRequest进行断点下载,并在下载过程中显示下载进度。

Unity 断点下载:使用 UnityWebRequest 实现进度显示

原文地址: https://www.cveoy.top/t/topic/lMPv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录