Unity3d新网络请求方式UnityWebRequest详解

发表于2017-10-10
评论0 2.23w浏览

Unity将要逐步放弃www网络请求api,新的api请求方式来临:UnityWebRequestThe,也正是本篇文章要给大家介绍的重点,那就是UnityWebRequestThe的使用详解。


旧的  www :https://docs.unity3d.com/ScriptReference/WWW.html


新的 UnityWebRequestThe :https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.html

using UnityEngine;  
using UnityEngine.Experimental.Networking;  
using System.Collections;  
class MyBehaviour: public MonoBehaviour {  
    void Start() {  
        StartCoroutine(GetText());  
    }  
    IEnumerator GetText() {  
        using(UnityWebRequest www = UnityWebRequest.Get("http://www.my-server.com")) {  
            yield return www.Send();  
            if(www.isError) {  
                Debug.Log(www.error);  
            }  
            else {  
                // Show results as text  
                Debug.Log(www.downloadHandler.text);  
                // Or retrieve results as binary data  
                byte[] results = www.downloadHandler.data;  
            }  
        }  
    }  
}  

这是Unity5.4 中提供的 API,  为了代替WWW 以满足今天的 HTTP 通信的需求.     看官方文档,Unity5.2, 5.3 ,5.4 也是会有的!


UnityWebRequest 架构

 

UnityWebRequest  由三个元素组成。

◾UploadHandler        处理数据  将数据发送到服务器 的对象

◾DownloadHandler    从服务器接收数据 的对象

◾UnityWebRequest      负责 HTTP 通信流量控制来管理上面两个对象的对象。

来说明这些对象之间的关系,如下所示。



基本用法

 

比较UnityWebRequest 和 WWW 类的基本用法。

GET

www通过 url的写法:

using UnityEngine;  
using System.Collections;  
class MyBehaviour :  public MonoBehaviour {  
    void Start() {  
        StartCoroutine(GetText());  
    }  
    IEnumerator GetText() {  
        WWW request =  new WWW("http://example.com");  
        yield return request;  
        if (! string .IsNullOrEmpty(request.error)) {  
            Debug.Log(request.error)  
        } else {  
            //   
            if (request.responseHeaders.ContainsKey("STATUS") &&  
                    request.responseHeaders["STATUS"] == 200) {  
                //  
                string text = request.text;  
                //   
                byte [] results = request.bytes;  
            }  
        }  
    }  
}  

换成 UnityWebRequest 书写方式:

using UnityEngine;  
using System.Collections;  
using UnityEngine.Experimental.Networking;  
//   
// using UnityEngine.Networking;  
class MyBehaviour :  public MonoBehaviour {  
    void Start() {  
        StartCoroutine(GetText());  
    }  
    IEnumerator GetText() {  
        UnityWebRequest request = UnityWebRequest.Get("http://example.com");  
        //   
        // UnityWebRequest request = new UnityWebRequest("http://example.com");  
        //   
        // request.method = UnityWebRequest.kHttpVerbGET;  
        //   
        yield return request.Send();  
        //   
        if (request.isError) {  
            Debug.Log(request.error);  
        } else {  
            if (request.responseCode == 200) {  
                //   
                string text = request.downloadHandler.text;  
                //   
                byte [] results = request.downloadHandler.data;  
            }  
        }  
    }  
}  

如果想多了解点UnityWebRequestThe的内容,还可以去官看看。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: