新建一个Unity工程,创建一个游戏体,创建一个新的脚本Webmanager.cs,将其指向工程中的游戏体
服务器根目录添加一个文件夹TestPHP
在TestPHP文件夹再创建两个文件夹 Music 和 Image 用于发送图片和声音Music文件夹添加Lose.ogg文件,Image添加serverOK.png文件
在TestPHP文件夹添加脚本test.php
<?php if (isset($_GET['username']) && isset($_GET['password'])) { //收到get请求 //echo ' username is '.$_GET['username']." and password is ".$_GET['password']; echo 'server recive get request'; } elseif (isset($_POST['username'])&& isset($_POST['password'])) { //收到post请求 //echo ' username is '.$_POST['username']." and password is ".$_POST['password']; echo 'server recive post request'; } elseif (isset($_FILES['picture'])) { //收到发送来的图片并返回 echo file_get_contents($_FILES['picture']['tmp_name']); } elseif (isset($_GET['getInt'])) { //收到get请求Int //echo $_GET['getInt']; echo 12; } elseif (isset($_GET['getFloat'])) { //收到get请求Float //echo $_GET['getFloat']; echo 34.5; } else echo "error !!!"; ?>
using UnityEngine; using System.Collections; public class WebManager : MonoBehaviour { //提示label public string m_info = ""; // public Texture2D m_uploadImage; protected Texture2D m_downloadTexture; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI() { GUI.BeginGroup(new Rect(Screen.width * 0.5f - 100, Screen.height * 0.5f - 100, 500, 500),""); GUI.Label(new Rect(10,10,400,30),m_info); if (GUI.Button(new Rect(10, 50, 150, 30), "GET请求")) { StartCoroutine(IGetData(1)); } if (GUI.Button(new Rect(10, 100, 150, 30), "POST请求")) { StartCoroutine(IPostData()); } if (GUI.Button(new Rect(10, 150, 150, 30), "上传并下载图片")) { StartCoroutine(IRequestPNG(1)); } if (GUI.Button(new Rect(10, 200, 150, 30), "下载图片")) { StartCoroutine(IRequestPNG(2)); } if (m_downloadTexture != null) { GUI.DrawTexture(new Rect(0, 0, m_downloadTexture.width, m_downloadTexture.height), m_downloadTexture); } if (GUI.Button(new Rect(10, 250, 150, 30), "get请求Int")) { StartCoroutine(IGetData(2)); } if (GUI.Button(new Rect(10, 300, 150, 30), "get请求Float")) { StartCoroutine(IGetData(3)); } if (GUI.Button(new Rect(10, 350, 150, 30), "下载声音")) { StartCoroutine(IRequestAudio()); } GUI.EndGroup(); } //get请求 IEnumerator IGetData(int getType) { switch (getType) { case 1: //get请求 WWW www = new WWW("http://127.0.0.1/TestPHP/test.php?username=get&password=12345"); yield return www; if (www.error != null) { m_info = www.error; yield return null; } m_info = www.text; break; case 2: //get请求 获取Int WWW www2 = new WWW("http://127.0.0.1/TestPHP/test.php?getInt=123"); yield return www2; if (www2.error != null) { m_info = www2.error; yield return null; } m_info = www2.text; break; case 3: //get请求 获取Float WWW www3 = new WWW("http://127.0.0.1/TestPHP/test.php?getFloat=123.5"); yield return www3; if (www3.error != null) { m_info = www3.error; yield return null; } m_info = www3.text; break; default: break; } } //post请求 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/TestPHP/test.php",bs,Headers); yield return www; if (www.error != null) { m_info = www.error; yield return null; } m_info = www.text; } IEnumerator IRequestPNG(int type) { //上传并下载图片请求 if (type == 1) { //EncodeToPNG 函数将图片转出为byte数组 byte[] bs = m_uploadImage.EncodeToPNG(); WWWForm form = new WWWForm(); form.AddBinaryData("picture", bs, "screenshot", "image/png"); WWW www = new WWW("http://127.0.0.1/TestPHP/test.php", form); yield return www; if (www.error != null) { m_info = www.error; yield return null; } m_downloadTexture = www.texture; } else if (type == 2) { //下载图片 WWW www = new WWW("http://127.0.0.1/TestPHP/Image/serverOK.png"); yield return www; if (www.error != null) { m_info = www.error; yield return null; } m_downloadTexture = www.texture; } else { } } //下载声音 IEnumerator IRequestAudio() { WWW www = new WWW("http://127.0.0.1/TestPHP/Music/Lose.ogg"); yield return www; if (www.error != null) { m_info = www.error; yield return null; } AudioClip m_downlaodClip = www.oggVorbis; if (m_downlaodClip != null) { audio.PlayOneShot(m_downlaodClip); } } }
运行点击相应的按钮查看最上面的文字是否是服务器返回的相应数据
注:如果想服务器上传图片,要将本地的一个图片放到Unity工程 然后指向m_uploadImage,使用EncodeToPNG这个函数将图片转为byte数组
图片的格式注意改为可读,修改如下