IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Unity3d 要放弃WWW,看看新的网络请求方式

    u010019717发表于 2016-10-12 09:23:47
    love 0

    孙广东  2016.10.11

    http://blog.csdn.net/u010019717

                 Unity将要逐步放弃www网络请求api,新的api请求方式来临:

    UnityWebRequestThe


    旧的  www :

    https://docs.unity3d.com/ScriptReference/WWW.html

     

     

    新的 UnityWebRequestThe :

    https://docs.unity3d.com/Manual/UnityWebRequest.html

     

    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的 书写方式:

    // https://docs.unity3d.com/Manual/UnityWebRequest.html


    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;
                }
            }
        }
    }
    

    关于更多的内容  自己观看文档吧!






沪ICP备19023445号-2号
友情链接