原文地址:http://blog.csdn.net/iamyococo/article/details/44209243
public WWW (string url, byte[] postData, Dictionary<string, string> headers)
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;
}
if (GUI.Button (new Rect (10, 50, 150, 30), "Get Data")) {
StartCoroutine(IGetData());
}
StartCoroutine()方法的作用是启动协同程序,执行指定的方法,当然执行的方法的返回类型必须是IEnumerator。
关于程序所使用的PHP代码将会在最后列出。
效果为:
3.3Post方法
Get方法就是如上那么简单,接下来就是Post方法,有些类似,但是比较麻烦,当然Post方法有很多优点的,默认你是知道的。
IEnumerator IPostData() {
Dictionary headers = new Dictionary ();
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 url, byte[] postData, Hashtable 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;
}
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";
}
?>