Skip to main content

PlayFab 消費量: ベストプラクティス

PlayFab の消費量ベースの価格モデルでは、タイトルの実際のサービス利用分に対してのみお支払いいただきます。しかし、ここで当然の疑問が生じます。必要な機能をすべて実装しつつ、コストを抑えるためにタイトルをどう最適化するのがベストなのでしょうか。このドキュメントでは、その詳細に踏み込み、事前に計画する上で役立つベストプラクティスを説明します。 タイトルを開発モードから本番運用に移行する前に、Game Manager の Billing Summary タブでメーター情報を確認できます。 消費量メーターは 6 種類あります: Events、Profile、Content and Configuration、CloudScript、Insights、Multiplayer Services です。タイトルの最適化を始めるには、まず使用している各メーターを確認し、時間の経過とともにどのように蓄積されるかを見るのが最善の方法です。これにより、明らかな改善点をすばやく引き出すことができます。メーターの詳細については、価格メーター を参照してください。

Events

PlayFab には 2 種類のイベントがあります: PlayStream と Telemetry です。 PlayFab は PlayStream イベントを処理し、定義された PlayStream Actions をトリガーするかどうかを確認したり、User Segmentation を更新したりします。一部の PlayStream イベントは、認証や統計情報の更新などのサービス機能の呼び出しの結果として自動的に生成されます。タイトルは、この機能を拡張するために独自のカスタムイベントを生成できます。 Telemetry イベントは PlayStream では処理されません。これらのイベントは分析用途に使用され、直接データウェアハウスに送られます。Telemetry イベントは PlayFab で自動生成されるものではなく、タイトルによって生成されるカスタムイベントです。 いずれのイベントタイプでも、データのペイロードが大きくなるほどメーターの合計使用量が増加します。必要なデータだけを送信するようにすることで、全体的な使用量を削減できます。おおよその目安として、任意のイベントは、イベント本文内のデータ 1 KB ごとに該当メーターを 1 だけ増分します。 自分の利用目的に最も適したイベント経路を選ぶには、生成する各カスタムイベントをどのように利用するのかについて明確な計画を持つ必要があります。タイトルのオフライン評価のためだけに必要なイベントは Telemetry ルートを利用してください。Telemetry イベントの超過料金は PlayStream の半分以下であるため、これによりコストを大幅に削減できます。 構築済みの SDK のいずれかを使用している場合、ユーザー行動に関する一部の分析データが自動的に生成されることを覚えておくことが重要です。詳細は PlayStream Event Model リファレンス を参照してください。オプションのイベントをオフにするには、PlayFab Game Manager のゲームの Settings/Data Collection タブで分析設定を変更してください。同様に、デバッグ中は CloudScript の実行に対して「generate PlayStream event」オプションをオンにしておくのは良いアイデアですが、本番運用に移行する前には必ず無効にする必要があります。PlayStream Action によってトリガーされる CloudScript の場合、実運用で動作をデバッグする必要が出てきた場合には、後からいつでもオンに戻せます。

Profile

プロフィールは事実上「プレイヤーに関するすべて」を表しており、インベントリ、保存データ、統計情報などの一般的な要素が含まれます。また、前述の User Segmentation のように、PlayStream の LiveOps 機能を通じて固有の体験を提供するために使用するメタ情報も含まれます。加えて、Title Data、Catalogs、Stores といったタイトルレベルのレガシー機能の一部も、そのデータ実装が実質的に User Data と同じであるため、このメーターに含まれます。この一連のメーターは、すべてのプレイヤーのアクション、およびプレイヤーに対して行われるアクションによって駆動されるため、圧倒的に最も最適化計画が必要なものとなります。 価格メーターで捕捉される使用量に主に寄与する要因は、読み取り、保存、書き込みされるデータの量、およびメーター対象のデータを生成する API を呼び出す頻度です。 これらのメーターに「回転」を与える具体的な API 呼び出しの詳細については、価格メーター を参照してください。 まず、使用パターンが類似している User Data と Statistics から始め、続いてプレイヤーインベントリ管理について説明します。

データと統計

User Data の使用量を評価する際、イベントと同じ近似ロジックが適用されます—各 1 KB がメーターカウントを 1 増加させます—ただし、この計算の目的においては、呼び出しの各「要素」は別個のものと考えるべきである点に注意してください。User Data 更新の呼び出しにおける各キーと値のペアは、それぞれ別にカウントされます。読み取りの場合、この 1 KB の計算はキーと値のペアの数に関係なく、返される合計データに適用されます。つまり、100 バイトのキーを 10 個書き込むことは、キーと値のペアの書き込みが最低でも 1 KB としてカウントされるため、プロフィール書き込みメーターの「10 目盛り」となる一方、それら 10 キーの読み取りは合計 1 KB であるため「1 目盛り」となります。使用量の詳細については、価格メーター を参照してください。 Statistics はやや複雑で、プロフィールを更新し、リーダーボードにも影響を与える可能性があります。一般的な目安として、更新される各統計はプロフィール全体の更新として考えられ、読み取りは各呼び出しで読み取られるデータの合計サイズに基づきます。またストレージは 1 GB あたりで課金され、統計は通常わずか数バイトしか消費しないため、ここでは読み書きに焦点を当てます。 合計データサイズが重要であるため、まずそれを最適化することが第一歩です。幸いにも、この目的にはよく知られたテクニックが数多くあります。たとえば、アイテムに対して綴られたテキストの代わりに enum や ID を使用する、大規模データをバイナリとしてパックする、あるいはビットフィールドを使用してデータをより小さなスペースにパックする、などです。これが完了したら、次のステップとして、これらの読み書き呼び出しをいつ行う必要があるかを慎重に評価します。 もしあなたが PC やコンソール開発、特にシングルプレイヤー ゲームから来ているなら、これは新しいパターンかもしれません。ただし、これらの環境では、クライアントデバイス上のリソースヒットとガベージコレクションに注意する必要があります。重要なタイミングでパフォーマンスの低下を引き起こす可能性があるからです。タイトルがクラウド上のリソースを使用する場合、そのロジックを拡張し、パフォーマンス コストに加えて、各リソースヒットに実際のコストが発生することを考慮する必要があります。 読み書きの最適な頻度をどのように決定しますか?データや統計をより頻繁に更新したいと考える開発者にとって最も一般的な懸念事項の 2 つは、チート対策と、プレイヤー間のやり取りのために、あるいはゲームが予期せず終了した場合のデータ損失を防ぐために、タイムリーな情報をサーバー側に保存することです。

チート対策

必要不可欠なセキュリティを確保するためにバックエンドデータを常に更新する必要があるように見えるかもしれませんが、ゲームがセッションを完全にサーバー主導で制御する必要がない限り、頻繁な更新はほとんど必要ありません。まず、根本的な問題は、実際にどれだけのセキュリティが必要かということです。 一部のゲーム、特にゲーム内広告で主に収益化しており、リーダーボードを持たないゲームでは、チートは大きな懸念事項ではありません。この場合、そのデータのセキュリティは実際にはあまり気にならないため、クライアントが送信するデータを信頼するアプローチが有効です。チート行動を特定し、どのように処理するかを決定するために、プレイヤーのイベント、データ、統計を確認するプロセスを実装することをお勧めします。 競争の完全性を維持したり、全体的なプレイヤー体験を保護したりする必要がある他のゲームでは、より強固なセキュリティが重要になります。具体的な要件によっては、特定のアプローチによりデータの読み書きの頻度を減らせる場合があります。 ゲームがリアルタイムでない場合、推奨するアプローチの 1 つは、ある期間、しばしばゲームの「ラウンド」で、数分間にわたってプレイヤーのゲームに関する情報を集約し、そのデータを検証するスクリプトに送信することです。評価すべき主要な要素はゲームによって異なりますが、考慮すべき一般的な概念の例をいくつか挙げます:
  • 前回のセッションレポートからどれくらい時間が経過し、クライアントは最新のセッションでどれくらいプレイしたと報告しているか?
  • プレイヤーが登録したスコアは、そのプレイヤーのレベル、装備などから見て妥当か?
サーバー主導のプレイヤー状態を頻繁に更新する必要があるようなリアルタイム要件が高いゲームの場合、PlayFab に保存されたデータを頻繁に更新するよりも、ホスト型ゲームサーバーを使用する方が良い解決策です。このモデルでは、セッション開始時にプレイヤーをサーバーに接続します。サーバーはサービスからそのプレイヤーに必要なすべてのデータを読み取り、時間経過に伴うプレイヤーのシミュレーション状態をホストし、クライアントは必要なレートでサーバーとデータをやり取りします。次にサーバーは、セッション終了時、またはセッションが特に長い場合は数分ごとに、プレイヤーの最新データで PlayFab の「長期保存」を更新します。 これがリアルタイム マルチプレイヤー ゲームで使用されるモデルです。またサーバー主導のチェックを必要とするシングルプレイヤー タイトルにも有効な手法ですが、その頻度が 1 分あたり数回程度であれば、Azure Functions CloudScript の方が良い選択肢となる場合があります。CloudScript の合計コストは簡単に計算できます。それは、実行あたり最低 128 MB および 100 ms のコストに、スクリプトが使用する他のサービス API 呼び出しに対する通常の計算を加えたものです。たとえば、スクリプトコードとスクリプト内の変数使用量の合計メモリフットプリントが 250 MB の場合、1 GB/s に達するためにそのスクリプトを 4 秒間(複数ユーザーにわたる可能性が高い)実行する必要があります。またそのスクリプトコード内で、Entity Objects、Title Data、User Data などを読み書きする場合、これらの各呼び出しがプロフィールメーターに与える回転を計算する必要があります。ホスト型ゲームサーバーのコストは、実行しているサーバー数に依存し、それはさらに 1 台のサーバーで同時にホストできるプレイヤー数に依存するため、両者の損益分岐点を判断するのは必ずしも簡単ではありません。ただし、スクリプトを高頻度で呼び出す必要があり、毎回サービスからデータを読み書きする必要がある場合は、ゲームサーバー ソリューションの方がはるかに良い選択となる可能性が高いです。

データの時宜性

書き込みレートが高いプロフィールを持つ開発者の間でよく聞かれるテーマの 1 つは、プレイヤーが進捗を失うことへの懸念です。プレイヤーがゲームを保存する前に終了し、次回プレイ時にローカルの状態が使用できない、あるいはその状態をデバイス間で移動する必要がある場合、プレイヤーの PlayFab 保存状態情報を可能な限り最新に保ちたいと考えるでしょう。 多くのゲームでは、サービスへの定期的で頻度の低い更新のハートビート(たとえば 15 分ごと)を行うことで、この問題に対処できます。しかし、その頻度を長くしたり短くしたりする追加のロジックを含めることも役立ちます。たとえば:
  • プレイヤーが積極的に重要な行動をとった場合に、即時書き込みを引き起こしてタイマーをリセットする「重要な更新」オーバーライドを含め、失われないようにします。
  • ゲームがプレイヤーの入力なしで進行し続ける場合、長時間入力がなければハートビート期間を長くすることを検討します。これは、プレイヤーが夜通し実行しっぱなしにすることが多いアイドル ゲームで特に重要です。
  • ユーザー メニューのボタンなど、プレイヤーが直接更新を強制する方法を提供します。ただし、この場合、クライアントデバイスから PlayFab に実際に呼び出されるレートを必ず制限してください。そうすれば、プレイヤーがそのボタンを何度も押しても、毎回呼び出しが生成されることはありません。
次回ゲームがプレイされたときにクライアントに状態情報がある場合は、ローカルのタイムスタンプをサービスからのデータのタイムスタンプと比較して、どちらを使用するかを決定するか、あるいはプレイヤーに選択肢を提供することもできます。 プレイヤーのプロフィール情報は、そのプレイヤー自身以外にも関連する場合があります。一部のゲームでは、競争心をあおるためであれ、非同期のフレンドとのやり取りやチャレンジなどを通じてプレイヤー体験に直接影響を与えるためであれ、プレイヤー間でクエリを行う必要があるかもしれません。 競争の場合、リーダーボード は、他のプレイヤー(多くの場合、現在のプレイヤーのスコアに近いプレイヤー)に関する情報のサブセットをサービスへの単一の呼び出しで共有することにより、その緊張感を生み出す理想的な方法です。Profile View Constraints を使用して、統計情報やタグなどの他のプロフィール要素を返すことができるので、これら他のプレイヤーに関する豊富な情報を提示できます。ただし、リーダーボード内のすべてのプレイヤーのリストを反復処理して、それぞれから追加情報を読み取ろうとしないことが重要です。これによりプロフィールの読み取り総数が急速に倍増し、コストが増大するからです。 セッション内でクロスプレイヤーデータを直接使用するゲームでは、最も一般的な最適化は、ローカルプレイヤーがやり取りしている数人の特定のプレイヤーに関する情報のみを読み取ることです。リアルタイム アクション ゲームでは、通常、これはセッションをホストしているサーバー上で行われます。他の場合(プレイヤーが互いの基地を攻撃できるゲームなど)、最も一般的なアプローチは、そのデータをすべてローカルデバイスに読み込むか、他のプレイヤーのデータのうちローカルプレイヤーが知るべきサブセットのみをローカルプレイヤーに送信することです。前者を行うゲームは、クライアントが送信する最終結果を評価するためにサーバーサイドロジックを使用します。後者を行うゲームは、ローカルプレイヤーがアクセスできる時点で、より多くのデータをセッションの経過とともに反復的に更新します。ただし、その場合でも、最終結果を評価するためにサーバーサイドロジックも使用します。ここでも、これをスクリプトで行うかホスト型サーバーで行うかを決定する分岐点は頻度に依存します。1 分あたり数回を超える場合は、そのデータが必要なセッションの部分にホスト型サーバーを使用する方が良いでしょう。

エコノミーとインベントリ

インベントリ、そしてより一般的にエコノミーは、異なるアプローチを必要とします。プレイヤーが実際の(金銭)価値や、認識された(仮想通貨や消費可能なコンテナの)価値を提供する場合、取引が守られるという暗黙の期待があるという事実は避けられません。アプリ内購入があるゲームでは、プレイヤーが実際の通貨で行った購入によるプロフィールメーターの増分は些細なコストです。多くのタイプのゲームでは、インベントリの更新頻度が低いため、全体的な使用量を大きく増やす懸念はほとんどありません。しかし、ゲーム内収益化がない場合でも、より頻繁なインベントリの更新があるゲームでは、コストを削減するのに役立つ最適化のコツがあります。 ベストプラクティスは、インベントリを文字通り、合理的に有限なインベントリとして考えることです。たとえば、インクリメンタル(または「アイドル」)ゲームでは、プレイヤーが取得する各リソースをアイテムとみなし、プレイヤーがそれを購入するたびに合計数を増分したくなるかもしれません。しかし、そのモデルは、プレイヤーがこれらのアクションを起こす頻度を計算するとすぐに破綻します。すぐに、各プレイヤーがセッション内でメーターを数百回、あるいは数千回もヒットすることに対処しなければならなくなります。このような状況では、これらの要素を User Data として考え、上記の Profile セクションの推奨事項に従ってサービスに更新するのが良いでしょう。 インベントリの更新レートが高いゲームについては、データの時宜性の問題に戻ります。たとえば、アクション ゲームはプレイヤーが持っている弾丸の数を追跡するかもしれませんが、その「スタック」の弾丸のバックエンドデータは、トリガーを引くたびに更新される必要はなく、特にゲーム状態がホスト型サーバーで管理されている場合はそうです。スタック可能アイテムは、パフォーマンスとコストの利点をもたらします。多くの仮想インスタンスを、カウント付きの単一の実際のインスタンスとして表現できるからです。アイテムのスタックへの変更を時間経過とともに集約し、セッションの終わりや、セッション中に定期的に更新することがよくあります。スタックを更新する際は、Player Item Management - Modify Item Uses を呼び出して、スタックへの追加のために処理された後にクリーンアップする必要がある N 個のアイテムインスタンスを追加するのではなく、スタックのカウントを変更するだけでよいかどうかを確認することをお勧めします。 コレクタブル カード ゲームのように、特定のジャンルのゲームは本質的に、プレイヤーのインベントリをやや高い頻度で更新する必要があります。しかし、ここでも、インベントリの変更を集約してプロフィールメーターの総使用量を削減する機会があります。たとえば、ドロップテーブル を使用するゲームでは、いくつかの異なるドロップテーブルからそれぞれ 1 つ以上の「引き」を持つコンテナを設計に頻繁に採用しています。通常、これらの引きが偶発的なアクションのみである場合、増分コストは十分小さく、懸念を引き起こしません。しかし、プレイヤーがそれらのコンテナを多数収集でき、短時間で複数を開くことができる場合、「N 個開く」あるいは「すべて開く」オプションを提供できます。その場合、PlayFab CloudScript using Azure Functions または独自のカスタム ゲーム サーバーを使用して、Player Item Management - Get Random Result Tables でドロップテーブルのセットを問い合わせるか、インベントリアイテムを生成せずに Player Item Management - Evaluate Random Result Table を呼び出します。次に、必要な場合にのみインスタンスを追加し、残りのアイテムスタックのカウントを更新することで、プレイヤーのインベントリをはるかに効率的に更新できます。

コンテンツと構成

Profile が主にプレイヤーに関するものであるのに対し、Content and Configuration は主にタイトルに関するものです。プッシュ通知、メール サービス、Title News などのタイトルレベルのコンポーネントがこのメーターに含まれます。それに加えて、これは Entity File の使用量を追跡するためにも使用されるメーターです。同様に、CDN ファイルをアップロードおよびダウンロードするための URL のリクエストもこのメーターで追跡されますが、CDN コストは別途で、Content Delivery Network (CDN) で説明されているとおり、ダウンロードされた総ギガバイト数に基づいて課金される点を明確にしておくことが重要です。Content and Configuration の読み取りメーターとストレージメーターの計算はデータのサイズに基づく点で Profile メーターと似ていますが、単位は明らかに 1 KB より大幅に大きくなります。Content and Configuration の書き込みメーターについては、書き込み操作の合計数のみに基づいており、各書き込みがメーターを 1 増分します。 補足として、Entity File システムは、タイトル、Group、または個々のプレイヤーに関連付けられているかどうかにかかわらず、大規模データに推奨されるサービスです。プレイヤーごとに大きなデータ保存があるゲームの場合、Entity File システムは一般的にコスト効率が高くなります。ただし、これらの更新の頻度が追跡される使用量に影響を与えることに注意してください。必要な File の数を、更新頻度に対して最適化することが最善です。 Content and Configuration メーターのコスト最適化の観点では、把握しておくべき最も重要な点は、タイトルがめったに変わらない自身の構成データをリクエストする頻度です。これは主に Title Data で、ゲーム バランス/チューニング データ、実績定義、ローカリゼーション データなど、すべてのユーザーに共通するゲームの側面を管理するために一般的に使用されます。 CloudScript を使用するゲームでは、スクリプトへの各呼び出しがこのタイトルレベルのデータに依存していることに気づいた場合、そのデータをスクリプトに直接「焼き込む」ことを検討したいかもしれません。これは、スクリプト自体にハードコードされたデータとして定義する、あるいは静的変数をキャッシュ手段として使用してサービスから仮想マシン(VM)インスタンスごとに 1 回情報を読み取ることによって、簡単に行えます。この方法では、タイトルレベルのデータは、任意の VM が初めてスクリプトを実行するときにロードされ、その VM の後続の実行で再利用されます。ここで留意すべき 3 つの点があります。第 1 に、スクリプトは多くの異なるユーザーによって使用されるため、個々のユーザーについて実行間で一貫していると考えるべきものは何もありません。第 2 に、単一のプレイヤーが呼び出しごとに異なるマシンに接続する可能性があるため、データの処理はステートレスと見なす必要があります。そして最後に、そのデータの経過時間を追跡し、最新のバージョンを持つことを確認するために定期的に再ロードする必要があります。

CloudScript

これは PlayFab サービスの主要な「エキスパンション ジョイント」の 1 つで、クライアントデバイスやサーバーからサーバー主導のロジックを実行したり、PlayStream ルールを介して(たとえばプレイヤーがセグメントに入ったときに)トリガーしたりできます。カスタム ゲーム サーバー ホスティングとは対照的に、スクリプトが実行するギガバイト秒(GB/s)に対してのみ料金を支払い、実行あたり 128 MB および 100 ms の最低値が適用されます。したがって、スクリプトが合計 250 MB のスペースを使用する場合(スクリプトコードとデータの間で)、1 GB/s に達するためにおそらく複数の実行にわたって合計 4 秒間実行する必要があります。 CloudScript のユースケースは一般的にプレイヤーの代わりにアクションを実行することを中心としているため、最適化のために考えるべきことの大半は、プロフィール メーターおよびコンテンツ/構成メーターに関する前 2 セクションでカバーしています。ただし、タイトルの合計実行数も CloudScript 使用量の計測の一部として追跡されるため、プレイヤーごとに CloudScript を呼び出す必要がある頻度を確認することは価値があります。一部のゲームでは、CloudScript への反復呼び出しでデータストアを管理しようとするよりも、アクティブなプレイヤー用の「ホット」データストアとしてホスト型ゲームサーバーを使用する方が、大幅にコスト効率が良い場合があります。

Insights

このメーターは、イベントの取り込みとエクスポートから Event History 検索や Data Explorer クエリまで、PlayFab サービスのすべての分析機能に関連付けられています。ここでの使用量は、イベントの処理速度、どれくらいのイベントデータを「ホット」にホストしたいか(Game Manager のクエリ用)、また Data Explorer クエリまたはデータに直接接続する視覚化ソフトウェアを介してどれくらいサービスを利用してデータを評価するかに影響されます。このメーターは、ゲーム内のアクティビティ(イベント)とゲーム外のアクティビティ(分析)の両方の影響を受けます。 つまり、Insights のコストは、プレイヤーから取得するイベントデータの量と、そのデータに対して行う分析処理の量によって左右されます。ベストプラクティスの観点では、前者には上記のイベントに関するアドバイスが適用されます。後者については、2 つの方法でコストを制御できます。まず、最も簡単なのは、タイトル用の Game Manager の Insights Management タブで合計ストレージを設定し、PlayFab に保持するイベントデータの合計量を制御できることです。次に、同じタブでタイトルのパフォーマンス レベルを設定できます。これにより、タイトルに割り当てられる合計 CPU リソース量、および Event History のクエリ用に「ホット」で保存されるデータ量が決定されます。それぞれに必要な量はデータ分析チーム メンバーのニーズによって異なるため、設定内容を理解するために彼らと確認するのが最善です。 Insights とその使用方法については、What is PlayFab Insights を参照してください。 Insights のベストプラクティスについては、Best Practices & FAQ を参照してください。

Multiplayer Services

これは価格モデルがまったく変わっていないため、すべての中で最もシンプルです。要するに、ホスト型 Multiplayer ServersParty service は常に使用量ベースで課金されてきました。 特にホスト型ゲームサーバーの場合、可能な限り多くのプレイヤーをサポートするために、常時稼働させなければならないサーバーコアの数を最適化することで、コストを最小限に抑えることができます。 これらのサーバーで低い ping 時間が重要な場合は、サーバーを実行するリージョンを選択できます。ほとんどのゲームでは、プレイヤーの最大集中は特定の主要リージョンに限定されますが、プレイヤーの分布が広い場合(特にゲームのロングテール段階にある場合)は、プレイヤーの近くの各リージョンでサーバーを実行するコストと、プレイヤーが少ないエリアのプレイヤーのサブセットに対する ping 時間が長くなる影響を天秤にかける必要があります。これに役立つ 1 つの方法は、QOS サービス を使用してプレイヤーをどのリージョンに配置するかを選択し、リージョンで必要な最低プレイヤー数の下限をどこに設定するかを決定することです。

ライブ ゲームの管理

これで基本的なメーターの説明は完了しましたが、タイトルが公開された後は何を考えるべきでしょうか?プレイヤー コミュニティの管理は、主に分析(前セクションの Insights)と Content and Configuration の更新に関わります。加えて、ほとんどのゲームでは、ゲーム自体との通常のやり取り以外でプレイヤーとエンゲージする必要があります。再エンゲージメント キャンペーン(プレイヤーを戻すために誘導する)から、メタ ゲーム アクティビティに対するコミュニティ報酬、さらにはゲーム外でのプレイヤー自身のコミュニティ活動に感謝することまで、最近の一般的な慣行は LiveOps 技術を使用してプレイヤーの高いエンゲージメントを維持することです。 この鍵の 1 つは、コストを抑えるだけでなく、ロジックが迅速に処理されるように、セグメンテーションを明確に定義されたグループに効果的にターゲット設定することです。たとえば、プレイヤーの再エンゲージメント、つまり、ある期間プレイを止めていたプレイヤーを戻すことについて考えてみましょう。これに取り組む良い方法は、いくつかの休眠ユーザーの時間枠を定義することです。たとえば、3 日、7 日、21 日間プレイしていないプレイヤーです。それぞれについて、再エンゲージメントに対して異なるアプローチをとることができます。単純な「あなたが恋しい」メッセージから始まり、「ここに無料のゴールド/エネルギー/その他をどうぞ」というメッセージで頂点に達します(もちろん、プレイヤーのアカウントに自動的に追加することと組み合わせます)。それぞれについて、推奨されるアプローチは、プレイヤーが最後にゲームにサインインしてプレイした時間に基づいて 1 時間のウィンドウを定義することです。そうすれば、最後にプレイした時間を対象とするだけでなく、操作を可能な限り効率的に行うために、セグメント内のプレイヤーのセットを最小限に抑えることができます。それらの各セグメントに対して 1 時間ごとに 1 回発火するスケジュール タスクを使用して、メッセージを送信し、任意のアイテムまたは仮想通貨(VC)をプレイヤーのインベントリに追加します。

まとめ

最終的には、PlayFab のようなバックエンド サービスの使用量を決定するのは、ゲームに必要な機能です。実際には、すべては 1 つの包括的な疑問に集約されます。それらの機能に対してどのような要件がありますか?セキュリティを優先するか、データの時宜性を優先するか、プレイヤーの対戦/競争レベルを優先するか、それともまったく別のものを優先するかにかかわらず、バックエンド データとのより高いレベルのやり取りに向けて押し進める要因は数多くあります。それらの要件を批判的な目で見て、どれがどうしても必要で、どれがそうでないかを見極めることができるようになるのは、ゲーム内の他のコードの最適化とよく似ています。それは、リソース利用が高い箇所を注意深く見て、本当にそうする必要があるのか、あるいはそのロジックを再設計して使用量を削減する方法があるのかを判断する問題です。 やり取りがリアルタイムでプレイヤー間のものである場合、それはやり取りの複雑さに帰着します。このタイプのほとんどのゲームでは、シミュレーション状態を管理し、セッションの終わりに(またはセッションが長い場合は数分ごとに)バックエンドデータのみを更新するホスト型サーバーが、通常は最良のソリューションです。ただし、協力型ゲームや、フレンドとのみ(またはフレンドに対して)プレイするゲームなど、対話が完全に信頼されていて、チートの動機が最小限に抑えられているケースは数多くあります。他にも、セッションのデータをチェックする方法についての要件が最小限で、両プレイヤーが各セッション後にレポートを送信するだけで、サーバー側のチェックで両方を比較できるものもあります。 リアルタイム要件のないゲームでは、プレイヤーが本当に秒単位の正確性を必要とするかどうかを検討してください。強いコミュニティのやり取りがある高度に競争的なゲームでは、そうであるかもしれません。しかし、多くのゲームでは、数分古い情報がプレイヤー体験に影響を与えることはありません。
最終更新日 2026年8月25日