码迷,mamicode.com
首页 > 编程语言 > 详细

关于 Unity3D 网络请求的笔记

时间:2015-03-12 06:26:52      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:网络   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  有空可以加入这里一起探讨问题,由于群小,请输入验证信息。

关于 Unity3D 网络请求的笔记

标签:网络   unity3d   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!