あなたのゲームにイベントとクエストを追加する



  • この記事は、Google Playゲームサービスに関する記事を和訳したものです。
  • 原文: Adding Events and Quests to Your Game
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2019年7月ころです。

このガイドでは、C++アプリケーションにてイベントとクエストのサービスを使用する方法を示しています。

始める前に

もしまだそうしていなければ、イベントとクエストのゲームコンセプトをレビューすることは役立つかもしれません。

イベントとクエストのサービスを使用するためにあなたの C++の開発環境をセットアップするには、C++のための入門ガイドの指示に従ってください。 SDKダウンロードページから Playゲームサービス C++ SDKをダウンロードすることができます。

あなたのゲームがイベントとクエストにアクセスできる前に、まず、Google Play Consoleにてそれらを定義しなければなりません。

イベントを提出する

あなたのゲームに発生する興味あるイベントが発生するたびに、イベントサービスに通知するためのコードを、あなたのゲームに追加することができます。 あなたのゲームにて捕捉することができるイベントの例としては: 敵を殺すこと、様々なゲームの領域を探索して戻ること、あるいは、ゲーム内のアイテムを取得することです。 一般的には、プレイヤーがイベントに関連するアクションを実行(例えば “Killed one monster”)するたびに、イベントのカウントを 1増加するためにイベントマネジャー上の Incrementメソッドを呼び出します。

次の例は、更新されたイベントカウントをイベントサービスに提出する方法を示しています。

  // Increment the event count when player performs the 'Attack blue
  // monster' action.
  game_services_->Events().Increment(BLUE_MONSTER_EVENT_ID);

イベントを取得する

特定のイベントのために Googleのサーバに格納されている現在のカウント値を取得するには、Fetch*メソッドのいずれかを呼び出します。 例えば、もしあなたのゲーム内のカスタム UIからプレイヤーのゲーム内の統計あるいは進行状況を示したければ、これを実行するかもしれません。

次の例では、あなたのゲームにてイベントデータを取得しログに記録する方法を示しています。

  // Log Events details.
  LogI("---- Showing Event Counts -----");
  gpg::EventManager::FetchAllCallback callback =
      [](gpg::EventManager::FetchAllResponse const &response) {
    for (auto i : response.data) {
      gpg::Event const &event = i.second;
      LogI("Event name: %s  count: %d", event.Name().c_str(),
           event.Count());
    }
  };
  game_services_->Events().FetchAll(callback);

クエストを表示する

あなたのゲームにクエストを統合するには、利用可能なクエストのリストを表示するためのユーザインタフェース(UI)をプレイヤーに提供します。 開発を簡素化するために、Play Games SDKは、あなたがすぐに使用することができるデフォルトのクエストリスト UIを、QuestManagerを通して提供します。 クエストリスト UIは、プレイヤーが、クエストの詳細を表示し、オープンなクエストを受け入れ、彼らが完了したクエストのための報酬を請求できるようにします。

すべてのクエストのリストを持つ UIを表示するには、ShowAllUI*関数のいずれかを呼び出します。 単一のクエストを持つ UIを表示するには、ShowUI*関数のいずれかを呼び出し、Questオブジェクトを渡します。

クエストの受諾を処理する

あなたのゲームは、ひとたび彼らが受け入れたクエストの、プレイヤーの進行状況を追跡し始めることができます。 もしあなたのゲームがビルトインのクエストリスト UIを使用するならば、プレイヤーのクエストの受諾は、QuestUIResponseオブジェクトが有効な accepted_questを持つことを引き起こします(チェックするには、.Valid()を呼び出します)。

もしビルトイン以外の UIを使用しているならば、プレイヤーがクエストを受け入れることを有効にするために QuestManagerオブジェクトの Accept*メソッドを使用することができます。

クエストの完了を処理する

クエストの報酬を請求するには、あなたのゲームは、まず、プレイヤーが報酬を請求したことをクエストサービスに通知しなければなりません。 それから、あなたのゲームはクエストのマイルストーンに関連する CompletionRewardDataプロパティによってデザインされた、適切なゲーム内のアイテムあるいは特典を、プレイヤーに報酬として与えることができます。

プレイヤーがクエストを受け入れた後、あなたのゲームにて彼らの進行状況を捕捉することを確認してください。 彼らがクエストを完了する途中で、マイルストーンに向かって進行あるいは達成したときに、イベントの更新を提出することによって、これを行います。

プレイヤーがクエストを完了するために必要となるすべての基準を達成したとき、彼らはクエストリスト UIからクエストの報酬を請求することができます。 もしプレイヤーがこの選択をしたならば、あなたの QuestUIResponse構造体の milestone_to_claimフィールドは、有効な QuestMilestoneオブジェクトを含んでいます。 それから、QuestManagerオブジェクトの ClaimMilestoneメソッドを呼び出すことによって、このマイルストーンを請求しなければなりません; マイルストーンは請求されなければならないので、再び請求されることはできません。 請求が成功したかどうかを見るために、ClaimMilestoneからのレスポンスをチェックしてください。

gpg::QuestManager::ClaimMilestoneCallback claim_callback =
  [](gpg::QuestManager::ClaimMilestoneResponse const &claim_response) {
    if (IsSuccess(claim_response.status)) {
      LogI("Successfully claimed milestone! Do something with "
           "CompletionRewardData().");
    }
  };

gpg::QuestManager::QuestUICallback ui_callback =
  [this, claim_callback](gpg::QuestManager::QuestUIResponse const &ui_response) {
    if (ui_response.accepted_quest.Valid()) {
      LogI("Accepted quest: %s", response.accepted_quest.Name().c_str());
    }
    if (ui_response.milestone_to_claim.Valid()) {
      game_services_->Quests().ClaimMilestone(ui_response.milestone_to_claim,
                                              claim_callback);
    }
  };

game_services_->Quests().ShowAllUI(ui_callback);