2. 冒険を登録して一覧に表示する
ログインできるようになったので、次は冒険の一覧を作りましょう。最初の冒険は「森の探索」です。冒険を GS2 ではクエストと呼び、クエストグループにまとめて管理します。今回はクエストグループ main に forest として登録し、画面に名前を表示してみます。
ゲームの設定を用意する
冒険の名前や報酬など、開発者が決めるゲームの設定を「マスターデータ」と呼びます。一方、プレイヤーが持っているコインや、どの冒険の途中かを表すものは「ユーザーデータ」です。まずは、一覧に表示するマスターデータを作ります。
forest はプログラムが冒険を指定するための識別子で、「森の探索」はプレイヤーに見せる名前です。二つを分けておくと、画面上の名前を変えても、プログラムでは同じ冒険として扱えます。
一覧を表示するための設定を作ります。開始時の消費と報酬の設定欄は、空にしておきます。
手順
クエストを追加する
第1章で使った Studio の Adventure プロジェクトを開きます。機能を追加で クエスト を検索し、カードの追加を押してください。
追加済みと表示されるまで待ちます。クエストが使う「スケジュール基盤」も一緒に追加されます。
クエストグループを作る
表 → クエスト → クエストグループ(QuestCollection) を開き、行を追加を押します。ID のセルを選んで Enter を押し、main と入力して Enter で確定します。開催スケジュールは空欄にします。
表示名の列を追加する
クエストに、ゲームで表示する名前の列を追加しましょう。
- 表 → クエスト → クエスト(Quest) を開き、構造 タブを選びます。
- アセット配信の列 にある 列を追加 を押します。
- 列名を
displayName、型を string(文字列) にします。必須にする をオンにして、追加 を押します。
森の探索を登録する
データ タブを開き、行を追加 で次の行を作ります。文字や数値はセルを選んで Enter を押すと編集できます。クエストグループはセルを開いて main を選びます。アクションの列は アイテムなし のままにします。
| ID | クエストグループ | displayName | 開始時消費 | 通常クリア報酬 | 初回クリア報酬 | 失敗時アクション |
|---|---|---|---|---|---|---|
forest | main | 森の探索 | 0件 | 0件 | 0件 | 0件 |
displayName は表の右端にあります。横にスクロールして 森の探索 と入力し、保存します。
サーバーと Unity へ反映する
反映 → サーバとの差分を確認を押し、GS2 にサインインします。学習用プロジェクトと東京リージョンを選び、変更内容を確認してデプロイします。続いてUnity プロジェクトを更新するを実行します。
生成された一覧を画面に表示する
- Unity の
Gs2オブジェクトにQuestListHandlerを追加し、Collection をmainにします。下のコードで一覧を描くので Item Prefab と Content Parent は空欄のままです。 Assets/AdventureStudioView.csを作り、次のコードを貼り付けます。Gs2オブジェクトにAdventureStudioViewを追加し、Quests にQuestListHandlerを割り当てます。- 再生してログインすると、「森の探索」が表示されます。
using Gs2.Unity.Util;
using System;
using UnityEngine;
using GS2Studio.Generated.Quest;
public sealed class AdventureStudioView : MonoBehaviour
{
[SerializeField] private QuestListHandler quests;
private string message = "";
private void OnEnable()
{
if (quests != null) quests.Failed += ShowLoadError;
}
private void OnDisable()
{
if (quests != null) quests.Failed -= ShowLoadError;
}
private void ShowLoadError(Exception error)
{
message = "読み込めませんでした: " + error.GetType().Name;
}
private void OnGUI()
{
if (quests == null || Gs2GameSessionHolder.Instance == null || !Gs2GameSessionHolder.Instance.Initialized) return;
GUILayout.BeginArea(new Rect(20, 100, 650, 650), GUI.skin.box);
GUILayout.Label(message);
if (!quests.IsLoaded) { GUILayout.Label("冒険を読み込み中です"); GUI.enabled = true; GUILayout.EndArea(); return; }
foreach (var quest in quests.Binders)
{
GUILayout.Label(quest.DisplayName);
}
GUI.enabled = true;
GUILayout.EndArea();
}
}設定をデプロイする
この章のテンプレートをダウンロードし、コンソールの Deploy → スタックを新規作成から、スタック名 adventure-game で作成します。テンプレートデータでダウンロードしたファイルを選びます。adventure-login はそのまま残します。
クエストの設定は次の部分です。表示名は metadata に文字列として入れ、Unity も文字列として読みます。
Settings:
version: 2019-05-14
groups:
- name: main
quests:
- name: forest
metadata: 森の探索
contents:
- weight: 1
completeAcquireActions: []
consumeActions: []
firstCompleteAcquireActions: []
failedAcquireActions: []一覧表示のスクリプトを追加する
Assets/AdventurePlay.cs を作って次のコードを貼り付け、Adventure オブジェクトに追加します。Inspector の Login に、第1章の AdventureLogin を割り当てます。再生してログインすると、冒険の一覧が表示されます。
using Cysharp.Threading.Tasks;
using System.Collections.Generic;
using Gs2.Unity.Gs2Quest.Model;
using UnityEngine;
public sealed class AdventurePlay : MonoBehaviour
{
[SerializeField] private AdventureLogin login;
private readonly List<EzQuestModel> quests = new List<EzQuestModel>();
private bool ready;
private string message = "読み込み中です";
private void OnGUI()
{
if (login == null || login.Session == null) return;
GUILayout.BeginArea(new Rect(20, 210, 650, 650), GUI.skin.box);
GUILayout.Label(message);
if (ready)
{
foreach (var quest in quests)
{
GUILayout.Label(quest.Metadata + " (" + quest.Name + ")");
}
}
GUI.enabled = true;
GUILayout.EndArea();
}
private void Start() => LoadQuests().Forget();
private async UniTask LoadQuests()
{
try
{
await UniTask.WaitUntil(() => login.Session != null,
cancellationToken: this.GetCancellationTokenOnDestroy());
var group = login.Gs2.Quest.Namespace("adventure-quest").QuestGroupModel("main");
await foreach (var item in group.QuestModelsAsync())
{
if (item != null) quests.Add(item);
}
ready = true;
message = quests.Count == 0 ? "冒険がありません" : "読み込みました";
}
catch (System.OperationCanceledException) { }
catch (System.Exception error)
{
message = "読み込めませんでした: " + error.GetType().Name;
}
}
}一覧を開いてみましょう
ゲームを起動してログインし、「森の探索」が一つ表示されることを確かめます。
練習:設定を変えて試す
名前を「森の見回り」に変えてみましょう。Studio ではデプロイと Unity 用アセットの更新を行い、SDK では設定を反映してクエストを読み込み直します。画面の名前も変わったでしょうか。デプロイ後、変更した設定がゲームに反映されるまで最大5分かかることがあります。変更前の名前が表示される場合は、少し待ってから Unity を再生し直して確認します。
次の章へ進む前に
表示名を変える練習をした場合は、「森の探索」に戻して反映します。グループは main、識別子は forest、消費と報酬はまだ設定していない状態です。




