ゲームサンプルからサーバーの仕組みとの疎通

9d2c38e6fe48e61528f6b2d34370768f

この章で学ぶこと

ゲームサンプルからサーバーの仕組みとの疎通を行います。

外部サーバーの多くは HTTP プロトコルでつながる

771bd9213b5426398ade19423c9a1433

外部サーバーの多くは HTTP プロトコルで構成されています。今回のサーバーもそうです。

ですので、外部サーバーのやりとりを扱うときに読み解くために HTTP の仕組みを覚えておくと、やりとりできるようになるので、みなさんの制作の幅が広がります。

HTTP について

HTTP プロトコルについて概要を把握します。

HTTP は Hypertext Transfer Protocol という正式名称です。 Web ブラウザが Web サーバと通信する際に主として使用する通信プロトコルです。

よくある例としては、みなさんが Web ブラウザからアドレスバーで URL を入力して HTML などのテキストによって記述された Web ページなどのコンテンツを表示するときのデータの送受信に用いられます。

参考文献

実際には、このような仕組みになっています。

HTTPはリクエスト-レスポンス型のプロトコルであり、クライアントがサーバにリクエストメッセージを送信する。 基本的な考え方は非常に単純で、「何を」「どうして」欲しいのかを伝える。URLが「何を」、メソッドが「どうして」に当たる。 サーバはこれにレスポンスメッセージを返し、基本的にこの時点で初期状態に戻る。つまり、サーバはクライアントの状態を保存しない。

Hypertext Transfer Protocol - Wikipedia - https://ja.wikipedia.org/wiki/Hypertext_Transfer_Protocol

この説明は、仕様をちゃんと説明してはいるのですが、ちょっととっつきにくいかもしれません。もう少し、噛み砕いていきましょう。

image

こちらの図を見つつ、典型的な HTTP セッション を追っていきます。

まず、クライアントからサーバーへ URL で「何か」決めて問い合わせます。また、HTTP ヘッダーでクライアントからサーバーが追加情報を渡すことができます。

image

そして、サーバーが HTTP リクエストから受け取った内容で、今度は HTTP レスポンスという形で応答します。こちらの図を見つつ、典型的な HTTP セッション を追っていきます。

まず、HTTP ヘッダーでサーバーからクライアントへ追加情報を渡すことができます。そして、HTTP 応答ステータスコードで正常に完了したどうかを伝えます。こちらを、みなさんのブラウザが受信すると Web ページが表示されます。

  • HTTP 応答ステータスコード(HTTP レスポンスステータスコード)
    • 特定の HTTP リクエストが正常に完了したどうかを示します。200 が Success で応答成功です。その他に、有名なものとして 404 , 500 , 503 などがあります。
    • 404 Not Found
      • サーバーがリクエストされたリソースを発見できないこと
    • 500 Internal Server Error
      • サーバー側で処理方法がわからない事態が発生したことを示します。
    • 503 Service Unavailable
      • サーバーはリクエストを処理する準備ができていないことを示します。
    • 参考文献(一覧はこちら)

全体の図としては以下の通りです。

image

本来、みなさんのブラウザで URL にアクセスして何かしらが表示されるまでには、このような流れで行われています。いろいろありますね。

ですが、いま、すべて覚える必要はないです。 HTTP プロトコルを扱うために、ざっくりこのような流れになっているんだなと理解できていれば OK です。

雰囲気での理解は、あとで生きてきます!

Unity における HTTP

Unity でつなげる公式ドキュメント

こちらに文献があります。

メジャーな GET と POST リクエストの文献

GET リクエスト

POST リクエスト例

今回は HTTP GET で一点突破します

次の章では、ブラウザで表示して確認もできる GET リクエストの API でサッと試してみます。

864f04a4ab4903aa57d39a7f41dc8b8b

Codespace で起動したサーバーに Unity からつなぎます。

Codespace の起動

0a3a35f3418068b7713ddaa729f2c660

GitHub にログインした状態で https://github.com/codespaces にアクセスします。

34de49185c6b28fb938519084d5b36fe

Codespaces のページです。さきほど使っていた Codespace をクリックして起動します。

サーバの起動

0a3a35f3418068b7713ddaa729f2c660

  • ターミナルで node term1-1.js をサーバ起動
  • ポートタブで今回のサーバ起動を公開
  • シークレットウィンドウで今回のサーバが公開されているか確認します

こちらの手順を進めます。

今回の Unity シーンを起動

6049726527f3133083e8ca07d1e6261c

Project タブから Assets > Scenes を選択します。Scene-Term1-1-Chapter04 をダブルクリックして起動しましょう。

シーンの仕組みの解説

ae6172228f962578c4c19763b03360d2

シーンの仕組みを解説します。

✅ポイント

  • Term1_1 Chapter03 と同じイベントの仕組みです
  • Cube には Term1_1_Chapter04_CubeEvent というスクリプトがむずびついています
    • Scene01 で使われた CubeEventではないです
  • Term1_1_Chapter04_CubeEvent で今回の URL にアクセスする

Term1_1_Chapter04_CubeEvent.cs の変更

Assets/Scripts/Term1_1_Chapter04_CubeEvent.cs をエディタで開きます。

using UnityEngine;
using UnityEngine.EventSystems;

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

public class Term1_1_Chapter04_CubeEvent : MonoBehaviour, IPointerClickHandler
{
    // アクセスする URL
    string urlGitHub = "ここにサーバーURLを入れる";

    public void OnPointerClick(PointerEventData eventData)
    {
        // マウスクリックイベント
        // Debug.Log($"オブジェクト {this.name} がクリックされたよ!");

        // HTTP GET リクエストを非同期処理を待つためコルーチンとして呼び出す
        StartCoroutine("GetGitHubData");
    }

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

        // リクエスト開始
        yield return request.SendWebRequest();

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

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

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

                break;
        }


    }
}

Term1_1_Chapter04_CubeEvent.cs のスクリプトはブラウザで表示できるデータにアクセスすることができます。

461a20fc2eaba496f38d84869a218755

今回のサーバーの行のクリップボードマークをクリックして今回の URL をコピーしましょう。

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

こちらの行が Unity で HTTP リクエストしている行です。HTTP リクエストする(GET メソッド) UnityWebRequest を呼び出しています。アクセスする先は変数 urlGitHub で設定しているので、このスクリプトの上部にある変数 urlGitHub に注目します。

    // アクセスする URL
    string urlGitHub = "ここにサーバーURLを入れる";

変数 urlGitHub は、こちらです。

ここにサーバーURLを入れる のところを、今回の GitHub の URL に置き換えてスクリプトを保存します。

動かしてみる

ad833d19086696f4841ff7d11828b4fb

Play ボタンをクリックします。

6044c7e49cf4a9d7af2d62b94476d854

Cube をマウスでクリックしてみましょう。GitHub の URL にアクセスします。

593ace4fa0bb0e5c367da426e94e14bf

Console でこのようなログが出てくれば成功です!ブラウザで見ていた Index の HTML ファイルのデータを見ることができます。

今回の Codespace の終了

0a8b4cfb807e57ea1382292a757c6899

今回の Codespace 終了しておきましょう。

results matching ""

    No results matching ""