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 UnityEngine;
using UnityEngine.Networking;
public class HttpController : MonoBehaviour
{
void Start()
{
StartCoroutine(GetRequest("https://joytas.net/php/hello.php"));
}
IEnumerator GetRequest(string uri){
using (UnityWebRequest uwr = UnityWebRequest.Get(uri)){
yield return uwr.SendWebRequest();
if (uwr.result != UnityWebRequest.Result.Success)
{
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 UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
public class ImageController : MonoBehaviour
{
void Start()
{
StartCoroutine(GetRequest("https://joytas.net/php/man.jpg"));
}
IEnumerator GetRequest(string uri){
using(UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(uri)){
yield return uwr.SendWebRequest();
if(uwr.result!=UnityWebRequest.Result.Success){
Debug.Log(uwr.error);
}else{
Texture texture = DownloadHandlerTexture.GetContent(uwr);
Sprite sp = Sprite.Create(
(Texture2D)texture,
new Rect(0,0,texture.width,texture.height),
new Vector2(0.5f,0.5f)
);
Image image=GetComponent<Image>();
image.rectTransform.sizeDelta=new Vector2(
sp.rect.width,sp.rect.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 UnityEngine;
using UnityEngine.Networking;
public class PostController : MonoBehaviour
{
void Start(){
StartCoroutine(PostRequest());
}
IEnumerator PostRequest()
{
string uri = "https://joytas.net/php/calc.php";
WWWForm form = new WWWForm();
form.AddField("x", 5);
form.AddField("y", 8);
using(UnityWebRequest uwr = UnityWebRequest.Post(uri,form)){
yield return uwr.SendWebRequest();
if(uwr.result != UnityWebRequest.Result.Success){
Debug.Log(uwr.error);
}else{
Debug.Log(uwr.downloadHandler.text);
}
}
}
}
コンソールに以下のように表示されれば成功だ。
課題
二つのフォームを設置し、数値を二ついれ計算ボタンを押すとサーバーにPOSTリクエストを投げ、その計算結果を表示するアプリを作成せよ。サーバーサイドはパラメータxとyに数値を渡すと合計を計算して返すものとする。
ボタンにつけるスクリプト例
using System.Collections;
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";
using(UnityWebRequest uwr = UnityWebRequest.Post(url, form)){
yield return uwr.SendWebRequest();
if(uwr.result != UnityWebRequest.Result.Success) {
Debug.Log(uwr.error);
} else {
result.text = uwr.downloadHandler.text;
}
}
}
}
関連記事
以下の記事ではサーバーから音楽データをダウロードして再生します。
コメント