Unity 断点下载:使用 UnityWebRequest 实现进度显示
下面是一个示例代码,演示如何使用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进行断点下载,并在下载过程中显示下载进度。
原文地址: https://www.cveoy.top/t/topic/lMPv 著作权归作者所有。请勿转载和采集!