Unity的WWW類的用法整理

Unity的WWW類的用法整理

1. Unity的WWW類主要支持GET 和POST兩種方式。GET方式請求的內容會附在url的後面一起做爲URL向服務器發送請求(請求的內容使用&符號隔開);而POST方式中向服務器發送請求的數據是以一個數據包的形式和url分開傳送的,相比GET方式,POST的優點:1.比GET安全;2.傳輸數據沒有長度限制;  綜上所述:在項目中使用POST  方式多一些。 以下爲具體的用法,因爲GET用法簡單,主要說POST的用法:

(1).一種GET方式:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	public string url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
	IEnumerator Start() {
		//在C#中,需要用到yield的話,必須建立在IEnumerator類中執行。
		WWW www = new WWW(url);
		//定義www爲WWW類型並且等於所下載下來的WWW中內容。
		yield return www;
		//返回所下載的www的值
		renderer.material.mainTexture = www.texture;
		//將下載下來的WWW中的圖片賦予到默認物體的材質上進行渲染出來
	}
}
這也是GET方式:
 IEnumerator IGetData()
    {
        WWW www = new WWW("http://127.0.0.1/Test.php?username=get&password=12345");


        yield return www;//等待Web服務器的反應


        if (www.error != null)
        {
            m_info = www.error;
            yield return null;
        }


        m_info = www.text;
    }

(2)下面說說POST方式:

說到POST方式,就要說一下WWWForm網頁表單,輔助類,用來生成表單數據,用來存儲WWW類中要訪問服務器的數據;這裏有幾個參數:

WWWForm.headers 表單頭   

 var headers :Hashtable       

(只讀)爲使用WWW類傳遞的表單返回一個正確的請求頭。這個域只包含一個頭,/"Content-Type"/爲表單設置正確的mine類型。"application/x-www-form-urlencoded"用於一般的表單,"multipart/form-data"用於使用AddBinaryData添加表單包含數據。   同理,WWWForm的數據格式也是使用的哈希表來存儲的數據,即鍵名對應一個值,注意這些鍵名是string類型的,並且是在服務器端能夠被識別的(能夠讀取其保存的值這樣一個名字,又或者說本地的表單中存放的數據格式是和服務器端開發人員商量好的,定了數據的傳輸協議的即數據格式(變量的順序等等))


IEnumerator IPostData()(上傳數據,然後獲得從服務器端讀到的數據)
    {
        System.Collections.Hashtable headers = new System.Collections.Hashtable();
        headers.Add("Content-Type", "application/x-www-form-urlencoded");//哈希表的數據格式

        string data = "username=post&password=6789";
        byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes(data);


        WWW www = new WWW("http://127.0.0.1/Test.php", bs, headers);


        yield return www;


        if (www.error != null)
        {
            m_info = www.error;
            yield return null;
        }


        m_info = www.text;
    }


有一個例子:((上傳圖片,然後獲得從服務器端讀到的圖片數據)
IEnumerator IRequestPNG()
    {
        byte[] bs = m_uploadImage.EncodeToPNG();////將圖片轉化爲Byte[]數組


        WWWForm form = new WWWForm();
        form.AddBinaryData("picture", bs, "screenshot", "image/png");


        WWW www = new WWW("http://127.0.0.1/Test.php", form);


        yield return www;


        if (www.error != null)
        {
            m_info = www.error;
            yield return null;
        }


        m_downloadTexture = www.texture;


    }



例如這種用法就是涉及到表單以及表單數據:
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	public WWWForm form = new WWWForm();
	public System.Collections.Hashtable headers = form.headers;
	form.AddField("name", "value");
	form.AddField("score", "value");
public byte[] rawData = form.data;public string url = "www.myurl.com";public WWW www = new WWW(url, rawData, headers);public IEnumerator Awake() {headers["Authorization"] = "Basic " + System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes("username:password"));yield return www;}}

這裏有一個延伸: 從服務器端獲得數據常常需要使用Json解析,獲得在遊戲之中可以正常使用的數據,下面整理Json解析的知識:
(1).需要把Json解析用到的Json文件放到Unity項目的Plugins文件夾下面,這時準備工作
(2).以一個例子說明Json解析實現的過程,例子如下:

publicvoidResolveJson()
{
                //定義的JSON字符串,注意JSON的格式
stringstr=@"
            {
                ""Name""     : ""yusong"",
                ""Age""      : 26,
                ""Birthday"" : ""1986-11-21"",
""Thumbnail"":[
{
           ""Url"":    ""http://xuanyusong.com"",
           ""Height"": 256,
           ""Width"":  ""200""
},
{
           ""Url"":    ""http://baidu.com"",
           ""Height"": 1024,
           ""Width"":  ""500""
}
 
]
            }";
//這裏是解析,包括整形與字符串
JsonDatajd=JsonMapper.ToObject(str);//若是從服務器端讀到的數據,則str應該換爲www.Text(前提是Text的數據格式是Json類型的)
Debug.Log("name = "+(string)jd["Name"]);
Debug.Log("Age = "+(int)jd["Age"]);
Debug.Log("Birthday = "+(string)jd["Birthday"]);
JsonDatajdItems=jd["Thumbnail"];
 
for(inti=0;i<jdItems.Count;i++)
{
Debug.Log("URL = "+jdItems[i]["Url"]);
Debug.Log("Height = "+(int)jdItems[i]["Height"]);
        Debug.Log("Width = "+jdItems[i]["Width"]);
}
}



http://www.xuanyusong.com/archives/1901

整理:
  1.          www.Dispose (); //釋放資源   在使用www類結束時,調用此方法,釋放資源



發佈了14 篇原創文章 · 獲贊 8 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章