Unity 与 Web 的简单交互

新建一个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 !!!";


?>

WebManager.cs

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 与 Web 的简单交互_第1张图片


注:如果想服务器上传图片,要将本地的一个图片放到Unity工程 然后指向m_uploadImage,使用EncodeToPNG这个函数将图片转为byte数组

图片的格式注意改为可读,修改如下

Unity 与 Web 的简单交互_第2张图片

你可能感兴趣的:(Unity 与 Web 的简单交互)