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);
//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;
}
}
}
関連記事
以下の記事ではサーバーから音楽データをダウロードして再生します。
コメント