LoginSignup
30
28

More than 5 years have passed since last update.

UnityでHTTPに接続する

Last updated at Posted at 2019-02-18

Unityのバージョン: Unity 2017.4.13f1
https://unity3d.com/jp/get-unity/download/archive

zipcloud 郵便番号検索API
http://zipcloud.ibsnet.co.jp/doc/api

Unity側の設定

  1. Hierarchyに空のゲームオブジェクトを作成して名前をMainControllerにします。
  2. 名前がMainControllerのC#ファイルを作成して、ゲームオブジェクトのMainControllerのコンポーネントに追加します。
  3. UI > Textオブジェクトを作成して、MainControllerスクリプトのプロパティText Resultにセットします。 01.png
  4. UI > Buttonオブジェクトを作成して、On Clickプロパティを+ボタンで追加します。
  5. 追加したOn ClickプロパティにMainControllerオブジェクトをセットして、FunctionにMainControllerのOnClickメソッドを指定します。 02.png

UnityからHTTPにGET接続する方法

MainController.cs
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class MainController : MonoBehaviour
{
    //接続するURL
    private const string URL = "http://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060";

    //ゲームオブジェクトUI > ButtonのInspector > On Click()から呼び出すメソッド
    public void OnClick()
    {
        //コルーチンを呼び出す
        StartCoroutine("OnSend", URL);
    }

    //コルーチン
    IEnumerator OnSend(string url)
    {
        //URLをGETで用意
        UnityWebRequest webRequest = UnityWebRequest.Get(url);
        //URLに接続して結果が戻ってくるまで待機
        yield return webRequest.SendWebRequest();

        //エラーが出ていないかチェック
        if (webRequest.isNetworkError)
        {
            //通信失敗
            Debug.Log(webRequest.error);
        }
        else
        {
            //通信成功
            Debug.Log(webRequest.downloadHandler.text);
        }
    }
}

UnityからHTTPにPOST接続する方法

MainController.cs
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class MainController : MonoBehaviour
{
    //接続するURL
    private const string URL = "http://zipcloud.ibsnet.co.jp/api/search";

    //ゲームオブジェクトUI > ButtonのInspector > On Click()から呼び出すメソッド
    public void OnClick()
    {
        //コルーチンを呼び出す
        StartCoroutine("OnSend", URL);
    }

    //コルーチン
    IEnumerator OnSend(string url)
    {
        //POSTする情報
        WWWForm form = new WWWForm();
        form.AddField("zipcode", 1000001);

        //URLをPOSTで用意
        UnityWebRequest webRequest = UnityWebRequest.Post(url, form);
        //UnityWebRequestにバッファをセット
        webRequest.downloadHandler = new DownloadHandlerBuffer();
        //URLに接続して結果が戻ってくるまで待機
        yield return webRequest.SendWebRequest();

        //エラーが出ていないかチェック
        if (webRequest.isNetworkError)
        {
            //通信失敗
            Debug.Log(webRequest.error);
        }
        else
        {
            //通信成功
            Debug.Log(webRequest.downloadHandler.text);
        }
    }
}

UnityでJSONデータを読み込んでSerializableクラスに入れる方法

MainController.cs
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class MainController : MonoBehaviour
{
    //接続するURL
    private const string URL = "http://zipcloud.ibsnet.co.jp/api/search";
    //JSONデータを表示するUI > Textオブジェクト
    public Text textResult;

    //ゲームオブジェクトUI > ButtonのInspector > On Click()から呼び出すメソッド
    public void OnClick()
    {
        //コルーチンを呼び出す
        StartCoroutine("OnSend", URL);
    }

    //コルーチン
    IEnumerator OnSend(string url)
    {
        //POSTする情報
        WWWForm form = new WWWForm();
        form.AddField("zipcode", 1000001);

        //URLをPOSTで用意
        UnityWebRequest webRequest = UnityWebRequest.Post(url, form);
        //UnityWebRequestにバッファをセット
        webRequest.downloadHandler = new DownloadHandlerBuffer();
        //URLに接続して結果が戻ってくるまで待機
        yield return webRequest.SendWebRequest();

        //エラーが出ていないかチェック
        if (webRequest.isNetworkError)
        {
            //通信失敗
            Debug.Log(webRequest.error);
        }
        else
        {
            //通信成功
            //ZipクラスにJSONデータを格納する
            Zip zip = JsonUtility.FromJson<Zip>(webRequest.downloadHandler.text);
            //zipクラスに格納したJSONデータをゲームオブジェクトUI > Textに出力する
            textResult.text = zip.message + "," + zip.results.Length + "," + zip.status;
            foreach (ZipResult zr in zip.results)
            {
                textResult.text += string.Format("\n{0},{1},{2},{3}", zr.address1, zr.address2, zr.address3, zr.prefcode);
            }
        }
    }
}

読み込むJSONデータ

JSONデータ.txt
{
    "message": null,
    "results": [
        {
            "address1": "東京都",
            "address2": "千代田区",
            "address3": "千代田",
            "kana1": "トウキョウト",
            "kana2": "チヨダク",
            "kana3": "チヨダ",
            "prefcode": "13",
            "zipcode": "1000001"
        }
    ],
    "status": 200
}

JSONデータを格納するためのSerializableクラス

Zip.cs
[System.Serializable]
public class Zip
{
    public string message;
    public ZipResult[] results;
    public int status;
}
ZipResult.cs
[System.Serializable]
public class ZipResult
{
    public string address1;
    public string address2;
    public string address3;
    public string kana1;
    public string kana2;
    public string kana3;
    public string prefcode;
    public string zipcode;
}
30
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
28