UnityでHttp通信を行ってみよう。

サーバーサイドの確認

1.まずはWebブラウザから以下のURLにアクセスしてみる。「Hello!」とだけ出力されるコンテンツだ。
http://joytas.net/php/hello.php

UnityからのHttp接続

2.Unityにて新規プロジェクトをHttpLessonとして2Dで作成する。
3.新規スクリプトとしてHttpController.csを作成し、Main Cameraに付与する。usingでUnityEngine.Networkingするのを忘れないこと。
●Controller.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class HttpController : MonoBehaviour {

	void Start () {
		StartCoroutine (HttpConnect ());
	}
	IEnumerator HttpConnect(){
		string url = "http://joytas.net/php/hello.php";
		//Unity2018~
		UnityWebRequest uwr = UnityWebRequest.Get(url);
		yield return uwr.SendWebRequest ();
		if(uwr.isHttpError || uwr.isNetworkError){
			Debug.Log(uwr.error);
		}else{
			Debug.Log (uwr.downloadHandler.text);
		}

	}

}


4.実行してみよう。コンソールにHello!と出力されれば成功だ。このようにHttp通信はコルーチンを使って行う。

画像

5.次に画像にアクセスしてみよう。まずはWebブラウザから以下のurlにアクセスしてみる。サーバーに置いてある画像が表示される。
http://joytas.net/php/man.jpg

Canvasの設置

6.Canvasを設置し、Canvasの子要素としてImageを作成しよう。(44*44)

7.ImageController.csを以下のように作成し、Imageにアタッチする。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

public class ImageController : MonoBehaviour {

	// Use this for initialization
	void Start () {
		StartCoroutine (HttpConnect ());
	}
	
	IEnumerator HttpConnect(){
		string url = "http://joytas.net/php/man.jpg";
		UnityWebRequest uwr = UnityWebRequest.GetTexture (url);
		yield return uwr.SendWebRequest ();
		if(uwr.isHttpError || uwr.isNetworkError){
			Debug.Log (uwr.error);
		}else{
			//サーバーから画像を取得
			Texture texture = ((DownloadHandlerTexture)uwr.downloadHandler).texture;
			//取得した画像をTexture2Dにキャストしてspriteを作成し、表示させる
			//Sprite.Create(texture2D,texture2Dのどこを使うか,画像のpivotを指定)
			GetComponent<Image> ().sprite =
				Sprite.Create((Texture2D)texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f,0.5f));
		}
			
	}
}

*unity2018~

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

public class ImageController : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
        StartCoroutine(HttpConnect());
    }

    IEnumerator HttpConnect()
    {
        string url = "http://joytas.net/php/man.jpg";
        UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(url);
        yield return uwr.SendWebRequest();
        if (uwr.isHttpError || uwr.isNetworkError)
        {
            Debug.Log(uwr.error);
        }
        else
        {
            //サーバーから画像を取得
            Texture texture = DownloadHandlerTexture.GetContent(uwr);
            //取得した画像をTexture2Dにキャストしてspriteを作成し、表示させる
            //Sprite.Create(texture2D,texture2Dのどこを使うか,画像のpivotを指定)
            GetComponent<Image>().sprite =
                Sprite.Create((Texture2D)texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
        }

    }
}

8.実行してみよう。サーバーの画像をもとにスプライトが作成され表示された。

POST通信

9.ここではPOSTを利用してパラメーターを送信してみる。以下はパラメータとしてx=5&y=8をPOSTで送信し二つの和をサーバーサイドで計算し結果をコンソールに出力する処理だ。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

public class ImageController : MonoBehaviour {

	void Start () {
		StartCoroutine (HttpConnect ());
	}
	
	IEnumerator HttpConnect(){

		WWWForm form = new WWWForm();
		form.AddField("x", 5);
		form.AddField("y", 8);

		string url="http://joytas.net/php/calc.php";
		UnityWebRequest uwr = UnityWebRequest.Post (url,form);
		yield return uwr.SendWebRequest ();
		if(uwr.isHttpError || uwr.isNetworkError){
			Debug.Log (uwr.error);
		}else{
			Debug.Log (uwr.downloadHandler.text);
		}
	}
}

課題

二つのフォームを設置し、数値を二ついれ計算ボタンを押すとサーバーにPOSTリクエストを投げ、その計算結果を表示するアプリを作成せよ。サーバーサイドはパラメータxとyに数値を渡すと合計を計算して返すものとする。

ボタンにつけるスクリプト例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

public class ButtonController : MonoBehaviour {
	Text x;
	Text y;
	Text resultText;
	
	void Start () {
		x = GameObject.Find ("InputX").GetComponent<Text>();
		y = GameObject.Find ("InputY").GetComponent<Text>();
		resultText =GameObject.Find ("ResultText").GetComponent<Text>();;
	}


	public void btClick(){
		StartCoroutine (HttpConnect(x.text, y.text));
	}
	IEnumerator HttpConnect(string x,string y){

		WWWForm form = new WWWForm();
		form.AddField("x", x);
		form.AddField("y", y);

		string url="http://joytas.net/php/calc.php";
		UnityWebRequest uwr = UnityWebRequest.Post (url,form);
		yield return uwr.SendWebRequest ();
		if(uwr.isHttpError || uwr.isNetworkError){
			Debug.Log (uwr.error);
		}else{
			resultText.text = uwr.downloadHandler.text;
		}
	}
}