Unity(UnityWebRequest)

Unity

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

サーバーサイドの確認

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

UnityからのHttp接続

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

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

public class HttpController : MonoBehaviour {

	void Start () {
		StartCoroutine (HttpConnect ());
	}
	IEnumerator HttpConnect(){
		string url = "https://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にアクセスしてみる。サーバーに置いてある画像が表示される。
https://joytas.net/php/man.jpg

Canvasの設置

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

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

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

public class ImageController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(HttpConnect());
    }

    IEnumerator HttpConnect() {
        string url = "https://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 texture = DownloadHandlerTexture.GetContent(uwr);
            StartCoroutine(HttpConnect());
            
            //textureからスプライトに変換
            //Sprite.Create(texture2D,texture2Dのどこを使うか,画像のpivotを指定)
            Sprite sp = Sprite.Create((Texture2D)texture,
                new Rect(0, 0, texture.width, texture.height),
                new Vector2(0.5f, 0.5f));

            //Imageコンポーネント取得
            Image image = GetComponent<Image>();

            //取得した画像サイズをもとにImageコンポーネントの大きさ設定
            image.rectTransform.sizeDelta = new Vector2(
                texture.width, texture.height);

            //作成したスプライトを設定
            image.sprite = sp;
             
        }
    }
}

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

POST通信

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

[参考]サーバーサイドはPHPで書かれた以下のコードが置いてある。

<?php
$x=isset($_POST['x'])? (int)$_POST['x']:0;
$y=isset($_POST['y'])? (int)$_POST['y']:0;
header('Content-Type: text/plain');
echo $x.'+'.$y.'='.($x+$y);

[Unityで作成するコード]

以下のPostController.csを作成し、カメラにアタッチする。

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

public class PostController : MonoBehaviour {

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

	IEnumerator HttpConnect(){

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

		string url="https://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
{
    public InputField et1;
    public InputField et2;
    public Text result;
    
    public void btClick() {
        string x = et1.text;
        string y = et2.text;
        StartCoroutine(HttpConnect(x, y));
    }
    IEnumerator HttpConnect(string x,string y) {
        WWWForm form = new WWWForm();
        form.AddField("x", x);
        form.AddField("y", y);
        string url = "https://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 {
            result.text = uwr.downloadHandler.text;
        }
    }
}

関連記事

以下の記事ではサーバーから音楽データをダウロードして再生します。

コメント

タイトルとURLをコピーしました