データベースといろいろ連携してみよう

9d2c38e6fe48e61528f6b2d34370768f

この章で学ぶこと

データ活用例の体験として、ユーザー情報としてランキング情報を取得してみます。

Codespace の起動

0a3a35f3418068b7713ddaa729f2c660

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

34de49185c6b28fb938519084d5b36fe

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

サーバの起動

0a3a35f3418068b7713ddaa729f2c660

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

✅ポイント

  • pointlist というデータベースがあります
  • 以前のとおり JSON Server でシンプルなデータベースが使えます

今回の Unity シーンを起動

6049726527f3133083e8ca07d1e6261c

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

今日は、このプログラムをベースに、送る値や受け取る値を Unity に設定していきます。

✅ポイント

  • ClickPart には、すでに Week06_Chapter02_ClickPart が割り当てられてポイントの加算やリセットを担当しています
  • RankingMessage は Week06_Chapter02_RankingMessage が割り当てられて、これから書いていきます。出来上がったサンプルは Week06_Chapter02_RankingMessage_OK_Sample がありますが、どうしてもわからないときに確認しましょう。
  • SendButton は Week06_Chapter02_SendButton が割り当てられて、これから書いていきます。出来上がったサンプルは Week06_Chapter02_SendButton_OK_Sample がありますが、どうしてもわからないときに確認しましょう。
  • 今回、新しく InputField が登場してポイント登録時に自分の名前が設定できるようになっています。

ランキング表示の API の URL を設定する

まず Week06_Chapter02_RankingMessage を進めていきます。

02db792fd629a56812a205234a08ae44

    // アクセスする URL
    string urlAPI = "";;

今回はランキング表示は GET リクエストをしています。API の URL を設定しましょう。

ランキング表示のデータを読み込めるように ResponseData と ResponseDataList を設定しよう

02db792fd629a56812a205234a08ae44

    // 受信した JSON データを Unity で扱うデータにする ResponseData ベースクラス
    // 今回は data の中身が配列で、List の中身を定義する ResponseDataList 型を作成。
    [Serializable]
    public class ResponseData
    {
        public List<ResponseDataList> data;
    }

    // name , point のプロパティが入っているので、List の中身を定義する ResponseDataList 型を作成
    [Serializable]
    public class ResponseDataList
    {

    }

今回受け取るデータの例です。

{
    data: [
        {
            "id": "33d3",
            "name": "seigo",
            "point": 5
        },
        {
            "id": "230d",
            "name": "seigo",
            "point": 254
        },
        {
            "id": "93b3",
            "name": "seigo",
            "point": 23
        }
    ]
}

今回は data の中身が配列で、List の中身を定義する ResponseDataList 型を作成しています。

List の中身を定義する ResponseDataList 型を作成を、name , point のプロパティが入っている形で設定してみましょう。

ランキングのテキストを表示してみよう

02db792fd629a56812a205234a08ae44

string textRankingList = "[Ranking]\n";

Debug.Log(response.data);

// データを一つずつ反映する
for (int i = 0; i < response.data.Count; i++)
{
    ResponseDataList currentLine = response.data[i];

    Debug.Log(currentLine);

    // 文字列を連結
    textRankingList += "";
}

// メッセージに反映
this.transform.GetComponent<TextMesh>().text = textRankingList;

データがうまく読み込めて ResponseData と ResponseDataList でさばけるようになると、この部分が動作します。

textRankingList の文字列を調整してランキング表示テキストに反映しましょう。currentLine には ResponseDataList で各行のデータが入っているので、

    // 文字列を連結
    textRankingList += "";

の文字列を調整して [1] seigo 5pt といった表現をしてみましょう。改行は末尾に \n を使いましょう。

ランキング表示を動かしてみましょう

02db792fd629a56812a205234a08ae44

ここまでできたらランキング表示を動かしてみましょう。

ポイントデータ記録ボタンで自分の名前を反映

Week06_Chapter02_SendButton を動かしていきましょう。

02db792fd629a56812a205234a08ae44

ポイントデータ記録ボタンで自分の名前を反映できるようにしましょう。

// 自分の名前を登録
// 固定値でなく InputField から取得する
pointRequestData.name = "Seigo";

GameObject InputField から .GetComponent<InputField>().text という形で入力フィールドから取得できるので実装してみましょう。

ポイント登録後にランキングの更新を行う

02db792fd629a56812a205234a08ae44

現在の機能だとポイント登録後にランキングの更新が行われません。ランキングを更新しましょう。

// RankingMessage で最新データを取得
// GetDataCore を動かす

のところで SendButton から Week06_Chapter02_RankingMessage クラスにある GetDataCore を実行してみましょう。

何度か動かしてみましょう

02db792fd629a56812a205234a08ae44

この状態だとデータが更新されるのですが、ランキングにはデータの行順で表示されてしまうので、新しいデータが表示されません。調整していきましょう。

ソート(並び替え)機能でポイント順にしてみる

02db792fd629a56812a205234a08ae44

JSON Server データをいろいろな並び順や見せ方をすることができます。

今回だとポイントを狙ったソートを使います。

その場合は、

  • /pointlist?_sort=point
    • ポイントの低い順
  • /pointlist?_sort=-point
    • ポイントの高い順

で書き換えてみましょう。

このように、サーバで並び順をうまく変更してくれる仕組みがあれば、Unity 側でソートプログラムを書かなくてもうまく表示することができます。

今回の Codespace の終了

0a8b4cfb807e57ea1382292a757c6899

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

振り返り

0a3a35f3418068b7713ddaa729f2c660

  • データベースと連携するために、データ取得・データ記録・データ操作(ソート)を行いました
  • データを集めるとゲームのルールやゲームのデータをして活用していろいろなゲーム企画ができます

results matching ""

    No results matching ""