背景:
一个非常实用的小功能,平常项目中可能会有这个需求:Unity中下载文件,并将下载进度显示出来今天总结一下!我们在下载的时候考虑的东西有很多,比如用户下载到了一半断开的情况,网络异常的情况等等。
代码如下:
这里下载服务器端的视频为例,测试在下载完成后, request.downloadProgress
返回的值大约在0.996左右,小于1,所以在下载完成后,我们用代码控制将进度条的value值等于1。
//进度条
private Slider my_Slider;
/// <summary>
/// 下载
/// </summary>
/// <param name="url">下载的地址</param>
/// <returns></returns>
IEnumerator Download(string url)
{
UnityWebRequest request = UnityWebRequest.Get(url);
request.SendWebRequest();
if (request.isHttpError||request.isNetworkError)
{
print("当前的下载发生错误" + request.error);
yield break;
}
while (!request.isDone)
{
print("当前的下载进度为:" + request.downloadProgress);
my_Slider.value = request.downloadProgress;
yield return 0;
}
if (request.isDone)
{
my_Slider.value = 1;
//将下载的文件写入
using (FileStream fs=new FileStream(Application.streamingAssetsPath+"/Test.MP4",FileMode.Create))
{
byte[] data = request.downloadHandler.data;
fs.Write(data, 0, data.Length);
}
}
}
注意:streamingAssets
文件夹在PC端是可读可写的。