当前位置:   article > 正文

Unity UnityWebRequest下载文件 替代WWW_lua如何使用unitywebrequest下载文件

lua如何使用unitywebrequest下载文件

今天测试那边提了个问题,就是当网络极差的时候,游戏下载将会停止(即一直在等待yield return www)当时间较长时网络恢复将无法继续下载,也没有提示,需要重启才能重新下载。因为WWW不存在设置timeout属性,因此当我们网络不好请求超时的时候,无法简单的做出判断。后面查阅资料发现Unity早在5.4版本的时候就出了新的API UnityWebRequest用于替代WWW。这边就简单的记录下UnityWebRequest的使用方法。

注:本文是在之前文章Unity 下载文件 WWW与HttpWebRequest 断点续传的基础下,添加的测试代码。所以有兴趣的同学要先看一下前文。

直接上代码,我们在DownTool.cs中添加一个新的Item,WebRequestDownloadItem

  1. /// <summary>
  2. /// UnityWebRequest的方式下载
  3. /// </summary>
  4. public class WebRequestDownloadItem : DownloadItem {
  5. UnityWebRequest m_webRequest;
  6. public WebRequestDownloadItem(string url, string path) : base(url, path) {
  7. }
  8. public override void StartDownload(Action callback = null) {
  9. base.StartDownload();
  10. UICoroutine.instance.StartCoroutine(Download(callback));
  11. }
  12. IEnumerator Download(Action callback = null) {
  13. m_webRequest = UnityWebRequest.Get(m_srcUrl);
  14. m_isStartDownload = true;
  15. m_webRequest.timeout = 30;//设置超时,若m_webRequest.SendWebRequest()连接超时会返回,且isNetworkError为true
  16. yield return m_webRequest.SendWebRequest();
  17. m_isStartDownload = false;
  18. if(m_webRequest.isNetworkError) {
  19. Debug.Log("Download Error:" + m_webRequest.error);
  20. } else {
  21. byte[] bytes = m_webRequest.downloadHandler.data;
  22. //创建文件
  23. FileTool.CreatFile(m_saveFilePath, bytes);
  24. }
  25. if(callback != null) {
  26. callback();
  27. }
  28. }
  29. public override float GetProcess() {
  30. if(m_webRequest != null) {
  31. return m_webRequest.downloadProgress;
  32. }
  33. return 0;
  34. }
  35. public override long GetCurrentLength() {
  36. if(m_webRequest != null) {
  37. return (long)m_webRequest.downloadedBytes;
  38. }
  39. return 0;
  40. }
  41. public override long GetLength() {
  42. return 0;
  43. }
  44. public override void Destroy() {
  45. if(m_webRequest != null) {
  46. m_webRequest.Dispose();
  47. m_webRequest = null;
  48. }
  49. }
  50. }


使用如下,在DownloadDemo的Start方法中初始化即可

  1. m_item = new WebRequestDownloadItem(testScrUrl, Application.persistentDataPath);
  2. m_item.StartDownload(DownloadFinish);


因为可以设置timeout时间,所以当网络不好连接超时的时候,yield return就会往下执行,并且给出error提示,我们就可以根据错误提醒玩家进行后续的操作。

UnityWebRequest,除了从服务器下载数据(downloadHandler),同样可以将数据发送到服务器(uploadHandler)以后补充。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/95791
推荐阅读
相关标签
  

闽ICP备14008679号