ゲームのアイデアと機能

次に追加する機能

チャット管理

メッセージ保持、明示的な購読、上限付きのモデレーション。

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

既存の2セッションでプロジェクトチャンネルを開き、1回送信して読取・通報。直接は友達、グループは有効な所属が必要です。

動画は後日公開

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

チャット管理

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

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

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

    既存の2セッションでプロジェクトチャンネルを開き、1回送信して読取・通報。直接は友達、グループは有効な所属が必要です。

    PHP simpleServerの全Chatルートは501 NOT_SUPPORTEDを返します。

この機能を実装する

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

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

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

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

C#
Assets/Scripts/ChatDemo.cs
horizOn 呼び出し
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4// Existing imported SDK and authenticated player session required.
5// Call these methods explicitly from a player action; nothing runs on startup.
6public sealed class ChatDemo : MonoBehaviour
7{
8 public async void ReadChannelSnapshot(string channelId)
9 {
10 var user = UserManager.Instance.CurrentUser;
11 if (user == null || !user.IsValid()) return;
12 var result = await ChatManager.Instance.SyncChannel(user.UserId, channelId);
13 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
14 Debug.Log("Snapshot epoch: " + result.Data.channel.epoch);
15 foreach (var message in result.Data.messages) Debug.Log(message.text);
16 // This is the small authorized server window, not the full device history.
17 // A raw snapshot does not authorize or populate a managed realtime feed.
18 // WatchChannel waits for confirmed subscription; revocation hides the feed.
19 }
20​
21 public void ReadDeviceHistory(string channelId, string before = null)
22 {
23 var user = UserManager.Instance.CurrentUser;
24 if (user == null || !user.IsValid()) return;
25 var page = ChatManager.Instance.ReadLocalHistory(channelId, before, 50);
26 if (!page.IsSuccess) { Debug.LogWarning(page.ErrorCode); return; }
27 foreach (var message in page.Data.messages) Debug.Log(message.text);
28 // Continue only on an explicit action using page.Data.nextCursor.
29 // Local delivered history can outlive the small current server window.
30 // For send/report, import the SDK ChatExample and preserve its original
31 // operationId, issuedAt, channel and text before one explicit send.
32 // An uncertain outcome never permits a fresh identity or implicit retry.
33 }
34}
完全なSDKサンプルを開く ↗

2人のプレイヤーと1つのチャンネル

既存の2セッションでプロジェクトチャンネルを開き、1回送信して読取・通報。直接は友達、グループは有効な所属が必要です。

管理フィードは購読確認後にイベント/resync、1つのSyncと変更フラグを使用。定期通信や切断時代替はなく、権限失効で本文を隠します。

送信前にプロジェクトとプレイヤーの元の要求を保存。ホストとセッションは通信制約のみ。不明なID、時刻、本文、リビジョンを置換しません。

操作404は失敗の証明ではありません。タイムアウトやOPERATION_EXPIRED後も元の要求を保持し、一致する受領証だけで照合します。

元の通報IDと理由を再使用。removedは正常な再実行です。REPORT_EXPIREDで新しい通報を作成しません。

PHP simpleServerの全Chatルートは501 NOT_SUPPORTEDを返します。

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

既存の2セッションでプロジェクトチャンネルを開き、1回送信して読取・通報。直接は友達、グループは有効な所属が必要です。

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

エンドポイント
  • GET/chat/limits
  • POST/chat/channels/open
  • POST/chat/channels/{channelId}/sync
  • POST/chat/channels/{channelId}/messages
  • GET/chat/operations/{operationId}
  • POST/chat/channels/{channelId}/messages/{messageId}/report
API リファレンスのすべてのエンドポイント
次のステップへのおすすめ

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

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