ゲームのアイデアと機能

次に追加する機能

マッチ

明示的なリビジョン、不透明な状態、個別の結果報告を使うターン制ゲーム。

SDK:developプレイヤーセッションが必要
Unity
マッチのイラスト
確認できる結果

二人のプレイヤーセッションでロビー、交互のターン、独立した最終レポートを調整します。

動画は後日公開

この手順の動画はまだありません。ガイドとMCPへの依頼は利用できます。

ターン制マッチ

同じプロジェクトを準備する

  1. ゲームの設定と同じプロジェクトをダッシュボードで選択してください。

    マッチ →
  2. 最初のリクエストに追加の定義は不要です。対応するゲームデータがなければ、空の結果も正常です。

    別々の二人のセッションでロビー作成、参加、順序指定の開始、交互のバイト状態送信を行い、同じ最終結果をそれぞれ報告します。

    最初の例はデータの読み取りです。グループ、マッチ、オブジェクトは作成しません。空のリストも正常な初回応答です。

この機能を実装する

ガイドは閲覧できます。実行には有効なプロジェクトキーが必要です。 プロジェクトを準備する

SDK をインストールし、プロジェクト設定をインポート済みで、プレイヤーがログインしていること。

この SDK サンプルは develop を使用します。必要な API がインストール済みの SDK にあるか確認してください。

クイックスタートで対象プレイヤーを接続します。ボタンやシーンの明示的な操作からReadMyMatches()を呼び出してください。ファイルを開くだけではリクエストは送信されません。

C#
Assets/Scripts/MatchesDemo.cs
horizOn 呼び出し
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4public sealed class MatchesDemo : MonoBehaviour
5{
6 // Initialize/connect and restore the existing player in the Quickstart first.
7 // Invoke explicitly. The SDK also enforces the returned polling cadence.
8 public async void ReadMyMatches()
9 {
10 var user = UserManager.Instance.CurrentUser;
11 if (user == null || !user.IsValid()) return;
12 var result = await MatchesManager.Instance.GetMatches(user.UserId);
13 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
14 Debug.Log($"Ledger revision: {result.Data.revision}");
15 foreach (var match in result.Data.recent)
16 Debug.Log($"Match {match.id}: {match.status}");
17 // Recent may include an active match after this player's forfeit.
18 // Respect result.Data.pollAfterSeconds; no background poll or automatic timeout.
19 }
20}
21// Full two-player recipe: SDK Examples/MatchesExample and MatchesSampleStore.
22// ReadLedger/ReadMatch -> SaveCreateAfterLedgerReview/SaveActionAfterMatchReview.
23// ApplySavedIntent sends one durable original body/revision. Unknown create is reconciled.
24// Never replace a pending original with the revision from a later read.
25// ReportResult uses the original finalStateRevision/result bytes/sorted winnerIds.
26// Ordinary consensus is not trusted victory proof. Ranked runs use Validated Actions.
完全なSDKサンプルを開く ↗

二人のプレイヤーと元のターン

別々の二人のセッションでロビー作成、参加、順序指定の開始、交互のバイト状態送信を行い、同じ最終結果をそれぞれ報告します。

送信前に正確なリクエストを保存します。タイムアウト後は状態を読み照合します。リビジョンや元の意図を黙って置き換えません。

報告には不変の最終リビジョンを使います。一致は信頼できる勝利の証明ではなく、不一致や報告不足で勝者を推測しません。

ランク実行には確認済みランクマッチと既存のValidated Actions処理が必要です。通常の報告は報酬を付与しません。

PHPは通常のマッチRESTルートに対応します。ランク検証とリアルタイムは利用できず、必要に応じてFEATURE_NOT_SUPPORTEDを返します。

新しい機能をテストしましょう。

二人のプレイヤーセッションでロビー、交互のターン、独立した最終レポートを調整します。

ゲームの設定と同じプロジェクトをダッシュボードで選択してください。

エンドポイント
  • GET/matches
  • GET/matches/limits
  • GET/matches/open
  • GET/matches/{matchId}
  • POST/matches
  • POST/matches/{matchId}/join
  • POST/matches/{matchId}/decline
  • POST/matches/{matchId}/start
  • POST/matches/{matchId}/turn
  • POST/matches/{matchId}/timeout
  • POST/matches/{matchId}/leave
  • POST/matches/{matchId}/cancel
  • POST/matches/{matchId}/result
  • POST/matches/{matchId}/ranked-run
API リファレンスのすべてのエンドポイント
次のステップへのおすすめ

毎ラウンドにハイスコアを。

ラウンド終了後にスコアを保存し、上位のプレイヤーを表示します。現在の接続とプレイヤーセッションを引き続き使用します。