Unity を検索

Unity ゲーミングサービス Use Cases でバトルバスのサンプルをお試しください

2022年4月22日 カテゴリ: ゲーム | 11 分 で読めます
Battle Pass Sample Header
Battle Pass Sample Header
取り上げているトピック
シェア

Unity ゲーミングサービス(UGS)の Use Cases は、どのように複数の UGS 製品を使えば、ゲーム開発でよくある課題を解決できるかを示すように設計されたサンプル集です。

これらのサンプルは、ゲームのバックエンドにおける典型的なユースケースとゲームデザイン要素を実装したもので、特定の開発タスクを解決する方法を示し、プロジェクトにさまざまな UGS パッケージを統合することによって、ゲームのバックエンドにおいて実現できる効率性を提示するものです。

サンプルの 1 つ「Battle Pass」は、無料プレイヤーと課金プレイヤーのそれぞれについて、シーズンごとにポイントに応じた報酬を与えるシステムです。この記事では、このサンプルの仕組みと、自分のゲームに実装する方法について説明します。 

UGS の Use Cases とは何か

これは現在進行中の Unity プロジェクトで、ダウンロードして Unity エディターで実行することができます。そして、Unity ゲーミングサービスを使うことで、さまざまなユースケースに対応できることを、コードを見て確認することができます。

このプロジェクトの主な目的は、開発者に実際に動くサンプルを使ってもらって、立ち上げのプロセスをより速く進めてもらうことです。コードは読みやすく、あらゆるレベルの開発者が利用できるように設計されています。

バトルパスとは何か

バトルパスは、ゲームを遊ぶことに対して報酬を出すことでプレイヤーの囲い込むためによく利用される方法です。さらに課金するプレイヤー層を取り込むことで、長期的にゲームの収益を向上させる効果もあります。

一般的には以下のように分解されます。

  • プレイヤーがゲームを進めると、ポイントを獲得し、より価値の高い報酬のティアを解除できる
  • 報酬トラックは 2 つ並行している
    • すべてのプレイヤーが請求できる無料報酬
    • バトルパスを購入することでアンロックされるプレミアム報酬。課金して購入できるゲーム内通貨を使用することも多くあります。
  • 報酬トラックは限られた期間のみ有効です。この期間はゲームの「シーズン」の長さになっていることが普通です。
Battle Pass screen

サンプルはどのように動くのか

ライブゲーム、特にマルチプレイのゲームでは、サーバーがプレイヤーのデータの大半についての信頼できる情報源であるべきです。 

これにより、他のプレイヤーよりも有利になるような不正行為や、本来は購入または獲得する必要があるアイテムや通貨を誤ってプレイヤーに付与することを防ぐことができます。 

同様に、シーズンごとの報酬やバトルパスがすべてのプレイヤーにとって公平であるためには、すべてのデータと決定をサーバー側で管理する必要があります。 

このバトルパスサンプルの設計では、Cloud Code (ベータ版)サービスが、バックエンドのインフラの処理について、面倒な処理をほとんどこなしています。Cloud Code では、ゲームロジックをクライアントから分離して書き、実行することができます。

その他、このサンプルでは、プレイヤーデータをクラウドに保存できる Cloud Save (ベータ版)などを使用しています。この場合、プレイヤーのシーズン経過をフラットな Key-Value システムで保存することができます。また、現在のシーズンのバトルパス所有フラグも Cloud Save で保存されます。

Game OverridesRemote Config を活用)を使えば、ゲーム内でパーソナライズされたプレイヤー体験を作成し、現在のシーズンやバトルパスのティアの内容を決定することができます。

バトルパスのティア報酬はすべて通貨かインベントリアイテムで、これらはすべて Economy (ベータ版)で管理されています。また、Economy にはバトルパスとジェムを交換するための Purchase が 1 つセットアップされています。

プレイヤーのデータがオンラインのバックエンドで管理されている他のゲームと同様、各プレイヤーはゲームにサインインする必要があります。これには、Authentication(ベータ版)を使用しています。ユーザーがサインインすると、すべての Unity ゲーミングサービス SDKは、すべてのサーバーリクエストでプレイヤーの固有 ID を送信すべきであることを自動的に検知します。

サンプルの仕組みは以下のようになっています。

  • シーズン報酬の設定データは Game Overrides からクライアントに送信される。これは Cloud Code でも利用可能(読み取り専用)。ゲームクライアントはこのデータを元に UI を決定する。Cloud Code はこのデータを使って、有効な報酬ティアへの請求を行っているプレイヤーにどの報酬を付与するかを決定する。
  • Cloud Save は、その報酬ティアを通じてプレイヤーの進捗を確認するために使用される。プレイヤーは Locked、Unlocked、Claimed の 3 つの可能な値を持つ、互いに排他的なティア状態の配列を持つ。
  • Cloud Save には、プレイヤーが今シーズンのバトルパスを購入しているかどうかを示す値も格納される。
Battle Pass blog diagram

プレイヤーの状態は、Cloud Save を使ってクライアントから直接取得・設定することもできますが、今回はそうしないほうがいいでしょう。

Cloud Save のデータを直接設定すると、プレイヤーデータがサーバー権威ではなく、クライアント権威になるため、ハッキングの可能性が生じます。Cloud Code を使うことで、Cloud Save にデータを書き込む前に、変更点を検証することができます。

Cloud Save から直接プレイヤーの状態を読み出すと、終了した前のシーズンのデータを取得してしまう可能性があります。Cloud Code を使うことで、シーズンが終了した場合、プレイヤーのシーズン状態を自動的にリセットすることができます。

ゲームに「Battle Pass」を追加する方法

このサンプルパッケージを使うことで、Unity ゲーミングサービスで機能を完備したサーバー権威型のバトルパスを実装することができます。

Game Overrides を使ったシーズン報酬

Game override

Unity ダッシュボード内で Game Overrides キャンペーンを設定し、JSON 値を入力することで、一定期間のゲームのバトルパス設定を定義することができます。 

キャンペーンは 1 時間や週末、バトルパスの場合はシーズン中の数か月など、どのような期間でも可能です。

Cloud Code によるサーバー権威型ロジック

プレイヤーがゲームの UI とインタラクションすることで、Cloud Code のリクエストが送信され、以下のような処理が呼び出されます。

  • シーズン経験値を獲得する

  • 報酬を請求する

  • バトルパスを購入する

  • プレイヤーのシーズン経過を記録する

  • ゲームクライアントに進行状況データを返す

これらの呼び出しの中には、Economy または Cloud Code を直接呼び出すことで、より簡単に呼び出すことができるものがあります。ただし、このようなリクエストの場合、シーズンが変わった場合や、そのプレイヤーが初めてシステムに参加する場合は、プレイヤーのシーズン経過も再初期化する必要があるかもしれません。 

各リクエストを行う前に、シーズンデータを再初期化する必要があるかどうかをクライアントが判断するようでは困ります。

このバトルパスのサンプルの設計では、バトルパスにアップグレードすると(すでに無料報酬を請求した後)、プレイヤーの過去の報酬が自動的に付与されます。このため、バトルパスの購入手続きは、Cloud Code 機能を通じてのみ行うことができます。 

この機能は、Economy を呼び出して、費用はかかるが報酬のない買い物を完了させるものです。それが成功すると、2 つのことが起こります。

  • バトルパスが Cloud Save に保存される値の形でプレイヤーに付与される。その値は現在のシーズンのバトルパスだけを表す。

  • プレイヤーに、すでに請求したティアのバトルパス報酬が付与される。

バトルパスで広がる可能性

シーズンごとの報酬やバトルパスの設計はいろいろ考えられますが、Unity ゲーミングサービスではこの例に限定されません。

  • ティアの配置は自由です。もしかしたら、無料特典が含まれていないティアもあるかもしれません。直線的なコースよりも、ティアが並んだページから好きな順番に選んで、最終的に次のページのロックを解除するような、より複雑なシステムを作りたい場合もあるでしょう。バトルパスの設計は、事実上あらゆるレベルの複雑さを含み得ます。 
  • このサンプルでは、ほとんどの報酬に通貨を使用していますが、マルチプレイヤーゲームで一般的なバトルパスの報酬は見た目を変えるアイテムです。バトルパスの設計は、ゲームがシングルプレイヤーかマルチプレイヤーかによって異なります。

Unity の In-app Purchase パッケージを使用すると、ゲーム内通貨ではなく、バトルパスに現実のお金を課金することができます。

Unity ゲーミングサービス Use Cases

Unity ゲーミングサービス Use Cases コレクションには、バトルパス以外にもいくつかのサンプルパッケージが含まれています。

  • Loot Boxes:Cloud Code を使用して Economy による通貨の付与を実行し、Economy で扱う通貨をランダムに、プレイヤーへの報酬として与える。
  • Daily Rewards:通貨やアイテムを一定時間ごとにランダムにプレイヤーに与える。
  • Starter Pack:Cloud Code を使って 1 回だけ購入できるアイテムを実装し、プレイヤーがスターターパックを購入できるようにする。
  • Seasonal Events:時限式の特別なイベントに基づいて、ゲームのコンテンツをリモートで更新する。
  • AB Test Level Difficulty:難易度に関わる特定の変数(この場合、レベルアップに必要な経験値の量)のどのバリエーションを取れば、ゲームがプレイヤーにとって最も魅力的になるかを判断するために、プレイヤーを複数のテストグループに分割してテストする。
  • Idle Clicker Game:暇つぶしのクリッカーゲームのように、サーバーの権威ゲーム状態をリアルタイムで更新する。
  • Cloud AI Mini Game:Unity ゲーミングサービス上で動作し、永続的な状態、通貨による報酬、統計、および簡単な AI を搭載したシステムと対戦するシンプルな三目並べゲームにおいて、サーバー側の権威ゲームプレイを実現する。
  • Command Batching:ゲームコマンドをキューにまとめ、サーバー上で一括処理することで、ゲームプレイ中に発生するサーバー呼び出しの量と頻度を削減する。

このプロジェクトは、Unity ゲーミングサービスの使用例を増やすために成長し続けるので、時折 GitHub リポジトリをチェックしていただければと思います。

2022年4月22日 カテゴリ: ゲーム | 11 分 で読めます
取り上げているトピック