关于 Unity3D 网络请求的笔记

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

public WWW (string urlbyte[] postDataDictionary<stringstringheaders)

public WWW (string urlbyte[] postDataHashtable headers)  ----->  deprecated

public WWW (string urlbyte[] postData)

public WWW (string urlWWWForm 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";
	}
?>


作者:木子才
iOS开发者俱乐部  232099237  有空可以加入这里一起探讨问题,由于群小,请输入验证信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值