Unity中的WWW网络请求

原文地址:http://blog.csdn.net/iamyococo/article/details/44209243


Unity 脚本关于网络请求的方法有如下:


public WWW (string urlbyte[] postDataDictionary<stringstringheaders)

public WWW (string url, byte[] postData, Hashtable headers)  ----->  deprecated

public WWW (string url, byte[] postData)

public WWW (string url, WWWForm form)

public WWW (string url)


很多方法呢,从文档中可以看到。

但是正在我看书的过程中发现有个方法已经被弃置了,所以特意写下笔记,增强记忆。

参考《Unity 3D/2D 手机游戏开发》一书自学的。

但遗憾在Unity5 的时候有方法被弃置,本人的思路将会根据该书来记录。


1.创建一个脚本,选C#,名为WebManager。


2.将脚本WebManager.cs 添加到一个对象上,即可触发脚本的事件。


3.开始编写代码。


3.1先编写一个界面。

using UnityEngine;  
using System.Collections;  
  
public class WebManager : MonoBehaviour {  
  
    //全局变量,用来接收信息提示,初始化为“Nothing”。  
    string m_info = "Nothing";  
  
    void OnGUI() {  
        GUI.BeginGroup (new Rect (Screen.width * 0.5f - 100, Screen.height * 0.5f - 100, 500, 200), "");  
  
        //创建一个标签,设置位置、大小,将接收信息提示的全局变量作为标签的文本内容。  
        GUI.Label (new Rect (10, 10, 400, 30), m_info);  
  
        //创建一个按钮,设置位置、大小,按钮上的标题为“Get Data”。  
        if (GUI.Button (new Rect (10, 50, 150, 30), "Get Data")) {  
            //这里写点击按钮所触发的行为、事件。  
        }  
  
        //创建一个按钮,设置位置、大小,按钮上的标题为“Post Data”。  
        if (GUI.Button (new Rect (10, 100, 150, 30), "Post Data")) {  
            //这里写点击按钮所触发的行为、事件。  
        }  
        GUI.EndGroup();  
    }  
  
    // Use this for initialization  
    void Start () {  
      
    }  
      
    // Update is called once per frame  
    void Update () {  
      
    }  
}  



首先就来个简单的方法吧。

Get请求是最简单的,所以一般简单的方法都是Get方法的。


3.2Get方法

先写下这个IGetData() 函数。需要注意的是该函数返回类型是迭代器 IEnumerator,通过这个可以进行协同调用。

IEnumerator IGetData() {  
    //使用Get方式访问HTTP地址  
    WWW www = new WWW ("http://yococoxc.vicp.cc:9999/test/userprint.php?username=yococo&password=123456789");  
  
    //等待服务器的响应  
    yield return www;  
  
    //如果出现错误  
    if (www.error != null) {  
        //获取服务器的错误信息  
        m_info = www.error;  
        yield return null;  
    }  
  
    //获取服务器的响应文本  
    m_info = www.text;  
}  

然后需要将上面的函数在Get对应的按钮上设置好,以便触发。

if (GUI.Button (new Rect (10, 50, 150, 30), "Get Data")) {  
    StartCoroutine(IGetData());  
} 

说明:

StartCoroutine()方法的作用是启动协同程序,执行指定的方法,当然执行的方法的返回类型必须是IEnumerator。


关于程序所使用的PHP代码将会在最后列出。


效果为:




3.3Post方法

Get方法就是如上那么简单,接下来就是Post方法,有些类似,但是比较麻烦,当然Post方法有很多优点的,默认你是知道的。

IEnumerator IPostData() {  
    Dictionary<string,string> headers = new Dictionary<string, string> ();  
    headers ["Content-Type"] = "application/x-www-form-urlencoded";  
  
    //将要发送的Post文本内容  
    string data = "username=yococo&password=123456789";  
    //将文本转为byte数组  
    byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes (data);  
  
    //向HTTP服务器提交Post数据  
    WWW www = new WWW ("http://yococoxc.vicp.cc:9999/test/userprint.php", bs, headers);  
  
    //等待服务器的响应  
    yield return www;  
  
    //如果出现错误  
    if (www.error != null) {  
        //获取服务器的错误信息  
        m_info = www.error;  
        yield return null;  
    }  
  
    //获取服务器的响应文本  
    m_info = www.text;  
} 

特别提示:

用了 Dictionary 这个类,请引入 using System.Collections.Generic; 否则会出错。

然后按钮对应上执行的方法。

if (GUI.Button (new Rect (10, 100, 150, 30), "Post Data")) {  
    StartCoroutine(IPostData());  
} 
结果:




3.4弃置的方法。

public WWW (string urlbyte[] postDataHashtable headers)

被弃置了,这个编程中不罕见,有弃置就会有相对代替的方法,文档是关键。


3.5另外的Post写法,实现另外的方法。

IEnumerator IPostData() {  
    //将要发送的Post文本内容  
    string data = "username=yococo&password=123456789";  
    //将文本转为byte数组  
    byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes (data);  
  
    //向HTTP服务器提交Post数据  
    WWW www = new WWW ("http://yococoxc.vicp.cc:9999/test/userprint.php", bs);  
  
    //等待服务器的响应  
    yield return www;  
  
    //如果出现错误  
    if (www.error != null) {  
        //获取服务器的错误信息  
        m_info = www.error;  
        yield return null;  
    }  
  
    //获取服务器的响应文本  
    m_info = www.text;  
}
此处少了添加头信息
IEnumerator IPostData() {  
  
    WWWForm form = new WWWForm ();  
    //添加字段(键,值)  
    form.AddField ("username", "yococo");  
    form.AddField ("password", "123456789");  
  
    //向HTTP服务器提交Post数据,提交表单  
    WWW www = new WWW ("http://yococoxc.vicp.cc:9999/test/userprint.php", form);  
  
    //等待服务器的响应  
    yield return www;  
  
    //如果出现错误  
    if (www.error != null) {  
        //获取服务器的错误信息  
        m_info = www.error;  
        yield return null;  
    }  
  
    //获取服务器的响应文本  
    m_info = www.text;  
}

接下来就是PHP代码:
<?php  
    if (isset($_GET['username']) && isset($_GET['password'])) {  
        echo "GET -> username is " . $_GET['username'] . " and password is" . $_GET['password'];  
    } else if (isset($_POST['username']) && isset($_POST['password'])) {  
        echo "POST -> username is " . $_POST['username'] . " and password is" . $_POST['password'];  
    } else {  
        echo "error";  
    }  
?>


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值