Node-RED に Unity が GET リクエストした連携サンプル

Unity のバージョン

2020.3.48f1 のバージョンでプロジェクトを作成してます。

それ以降のバージョンでも動くプログラムのはずです。

Unity に Cube を準備

be9e58c3e9aa39df46fed6ea186ba072

Unity に Cube を準備します。今回は Play ボタンで起動するだけで動作を目指します。

Cube に CubeEvent.cs を割り当て

Cube に CubeEvent.cs を割り当てます。

using UnityEngine;
using System.Collections;       // IEnumerator のための参照
using UnityEngine.Networking;   // UnityWebRequest のための参照

public class CubeEvent : MonoBehaviour
{
    // アクセスする URL
    string urlAPI = "ここにURLを入れる";

    // 起動時の動作
    void Start()
    {
        // HTTP GET リクエストを非同期処理を待つためコルーチンとして呼び出す
        StartCoroutine("GetAPIData");
    }

    // GET リクエストする本体
    IEnumerator GetAPIData()
    {
        // HTTP リクエストする(GET メソッド) UnityWebRequest を呼び出し
        // アクセスする先は変数 urlGitHub で設定
        UnityWebRequest request = UnityWebRequest.Get(urlAPI);

        // リクエスト開始
        Debug.Log("リクエスト開始");

        yield return request.SendWebRequest();

        // 結果によって分岐
        switch (request.result)
        {
            case UnityWebRequest.Result.InProgress:
                Debug.Log("リクエスト中");
                break;

            case UnityWebRequest.Result.ProtocolError:
                Debug.Log("ProtocolError");
                Debug.Log(request.responseCode);
                Debug.Log(request.error);
                break;

            case UnityWebRequest.Result.ConnectionError:
                Debug.Log("ConnectionError");
                break;

            case UnityWebRequest.Result.Success:
                Debug.Log("リクエスト成功");

                // コンソールに表示
                Debug.Log($"responseData: {request.downloadHandler.text}");

                break;
        }


    }
}

今回の Flow

alt text

今回の Flow はこちらです。

[{"id":"d39badb88d37dbe6","type":"http in","z":"0b015d7822a1e56f","name":"","url":"/api/message","method":"get","upload":false,"swaggerDoc":"","x":150,"y":80,"wires":[["6afaab42c02820e3","1456ca34e2e2c492"]]},{"id":"6afaab42c02820e3","type":"http response","z":"0b015d7822a1e56f","name":"","statusCode":"","headers":{},"x":350,"y":80,"wires":[]},{"id":"1456ca34e2e2c492","type":"debug","z":"0b015d7822a1e56f","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":360,"y":140,"wires":[]}]

こちらの JSON データをインポートします。

alt text

デプロイします。

サーバー URL 把握

これで Node-RED によるサーバーができました。

今回は、この一時的に使っているエディタそのもののサーバー URL で試してみます。

8355eb99ba9f5b82bf84301dbb7574ae

右上の i というアイコンをクリックします。

31d22a4c38d78b46dc9d6623573f5136

URL をテキスト選択してコピーします。

Unity の CubeEvent.cs 変更

    // アクセスする URL
    string urlAPI = "ここにURLを入れる";

こちらの ここにURLを入れる の部分に、さきほどのサーバー URLに /api/message を加えたものを上書きして保存します。

もし https://hogehoge123456789.herokuapp.com/ がサーバー URL なら https://hogehoge123456789.herokuapp.com/api/message となります。

動かしてみる

ここまで設定できたら Unity で Play ボタンを押して動かしてみます。

9da7c63b8cda0eae4455f9609a5c0381

Node-RED 側で debug ノードでデータが受信されて、このようにやり取りが成功しています!今回は何も値がないです。

980472611aaaee42a298204fb9056f4e

Unity 側のコンソールで送受信が成功します。 Node-RED が受け取ったデータをそのままオウム返しするので {} が返答されます。

GET リクエストのパラメータを送ってみる

Unity 側で GET リクエストのパラメータを送ってみます。

    // アクセスする URL
    string urlAPI = "ここにURLを入れる";

こちらにきほどのサーバー URLに /api/message を加えたものを上書きしましたが、さらに末尾に ?value=12345 と加えて保存しましょう。

もし https://hogehoge123456789.herokuapp.com/ がサーバー URL なら https://hogehoge123456789.herokuapp.com/api/message?value=12345 となります。

Unity で Play ボタンを押して動かしてみます。

dc99fcc2c757d2d34e3a8b73133319a4

Node-RED 側で debug ノードでデータが受信されて、今回受け取ったパラメータが受け取れています。

34eef9b8f9d894838491e0434164c9f8

Unity 側のコンソールで送受信が成功します。Node-RED が受け取ったデータをそのままオウム返しするので {"value":"12345"} が返答されます。

余談

  • 日本語を GET リクエストのパラメータにうまく含めるには URL エンコードする処理を加えましょう
  • JSON データとして送るのであれば data という値のパラメータに文字列で JSON を仕込んだうえで Unity で送りつつ Node-RED で受け取った文字列から JSON データをパースするとよいでしょう。

results matching ""

    No results matching ""