美文网首页Unity
UnityWebRequest进度条设计(Unity取代WWW的

UnityWebRequest进度条设计(Unity取代WWW的

作者: AngerCow | 来源:发表于2017-12-26 10:37 被阅读0次

    这两天逛Unity api时,发现UnityWebRequest,官方文档介绍看这里。,脚本api看这里。WWW存在很多问题。
    其中之一,www在ios下大文件存在缺陷。如果你们对于http的header部分操作频繁的话,就会出现头痛的事情了。

    1、字符集编码。很难控制。有时只能让服务器妥协一下。
    2、header的大小写问题。有时会出现大小写字符改变的问题,注意是“有时”,这种非必现的问题,往往是痛苦的根源啊……
    现在有了UnityWebRequest,就可以方便的实现一些以前难实现的功能。
    以前实现进度条功能,可以在yield return www之前用while循环获得下载进度。这样会阻塞程序。如果东西很大,还可能会造成卡顿。
    现在我用UnityWebRequest实现了一个进度条。我们先看效果:


    DownLoad.gif

    unity在5.4之后的版本才添加这个api,所以在用5.4以上的unity使用,我这里用的是unity2017.2的版本。上代码:

    using System;
    using System.Collections;
    using UnityEngine;
    using UnityEngine.Networking;
    using UnityEngine.UI;
    
    public class WebRequest : MonoBehaviour {
    
        public Slider slider;
        public Text text;//内容显示
        public Text progressText;//进度显示
    
        void Start()    {
            StartCoroutine(GetText());
        }
        IEnumerator GetText()    {
            using (UnityWebRequest uwr = UnityWebRequest.Get("https://nj01ct01.baidupcs.com/file/dbd83a3df9b920e7706cd0cca15ff6a8?bkt=p3-1400dbd83a3df9b920e7706cd0cca15ff6a8f7449fac00000019680a&fid=3423361126-250528-364549440400582&time=1514252723&sign=FDTAXGERLQBHSK-DCb740ccc5511e5e8fedcff06b081203-Mh6xyHm3%2Fqt7X6cRxEw50X%2BLj4Q%3D&to=63&size=1665034&sta_dx=1665034&sta_cs=1&sta_ft=txt&sta_ct=0&sta_mt=0&fm2=MH,Yangquan,Anywhere,,guangdong,ct&vuk=3423361126&iv=0&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=1400dbd83a3df9b920e7706cd0cca15ff6a8f7449fac00000019680a&sl=74317902&expires=8h&rt=pr&r=496061556&mlogid=8335651897587839115&vbdid=481251059&fin=test.txt&fn=test.txt&rtype=1&dp-logid=8335651897587839115&dp-callid=0.1.1&hps=1&tsl=177&csl=177&csign=aThxLmvlcWV08TOj13LIu308UFo%3D&so=0&ut=6&uter=4&serv=0&uc=3885765770&ic=3860577397&ti=5e666840c78f1973cbe71d11839bdeeaa56ae1a366feac0c305a5e1275657320&by=themis"))
            {
                uwr.SendWebRequest();//开始请求
                while (!uwr.isDone)
                {
                    //Debug.LogError(www.downloadProgress);
                    slider.value = uwr.downloadProgress;//展示下载进度
                    progressText.text = Math.Floor(uwr.downloadProgress * 100) + "%";
                    yield return 1;
                }
                if (uwr.isDone)
                {
                    progressText.text = 100 + "%";
                    slider.value = 1;
                }
                if (uwr.isNetworkError || uwr.isHttpError)
                {
                    Debug.Log(uwr.error);
                }
                else
                {
                    //显示下载后的文本数据
                    Debug.Log(uwr.downloadHandler.text);
                    text.text = uwr.downloadHandler.text;
                    byte[] results = uwr.downloadHandler.data;
                }
            }
        }
    }
    

    SendWebRequest()之后,就会触发一个请求。之后的操作会在unity主线程里开始请求数据。
    附工程地址:
    链接:https://pan.baidu.com/s/1pLh0IhH 密码:tnuw

    相关文章

      网友评论

        本文标题:UnityWebRequest进度条设计(Unity取代WWW的

        本文链接:https://www.haomeiwen.com/subject/lhrrgxtx.html