Spielideen & Features

Euer nächstes Feature

Chat

Gespeicherte Spielernachrichten, ausdrückliche Echtzeitabos und begrenzte Moderation.

SDK: developSpielersession erforderlich
Unity
Illustration für Chat
Euer sichtbares Ergebnis

Zwei bestehende Spielersitzungen nutzen: Projektkanal öffnen, einmal senden, Momentaufnahme lesen und eine gespeicherte Nachricht melden. Direktchat braucht Freundschaft, Gruppenchat aktive Mitgliedschaft.

Video folgt

Für diesen Schritt fehlt noch das Video. Die Anleitung und der MCP-Auftrag sind bereits nutzbar.

Chat

Dasselbe Projekt vorbereiten

  1. Wählt im Dashboard dasselbe Projekt wie in eurer Spielkonfiguration.

    Chat →
  2. Für die erste Anfrage ist keine weitere Definition nötig. Ein leeres Ergebnis ist gültig, solange passende Spieldaten fehlen.

    Zwei bestehende Spielersitzungen nutzen: Projektkanal öffnen, einmal senden, Momentaufnahme lesen und eine gespeicherte Nachricht melden. Direktchat braucht Freundschaft, Gruppenchat aktive Mitgliedschaft.

    PHP simpleServer antwortet für alle Chatrouten mit 501 NOT_SUPPORTED.

Feature einbauen

Ihr könnt die Anleitung vorab ansehen. Zum Ausführen braucht ihr einen aktiven Projekt-Key. Projekt vorbereiten

SDK installiert, Projekt-Konfiguration importiert und Spieler angemeldet.

Dieses SDK-Beispiel nutzt develop. Prüft, ob die nötigen APIs in eurem installierten SDK verfügbar sind.

Verbindet zuerst den vorgesehenen Spieler über den Schnellstart. Ruft ReadChannelSnapshot(channelId) ausdrücklich über einen Button oder eine Szenenaktion auf. Allein das Öffnen der Datei sendet keine Anfrage.

C#
Assets/Scripts/ChatDemo.cs
horizOn-Aufruf
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}
Vollständiges SDK-Beispiel öffnen ↗

Zwei Spieler, ein Kanal

Zwei bestehende Spielersitzungen nutzen: Projektkanal öffnen, einmal senden, Momentaufnahme lesen und eine gespeicherte Nachricht melden. Direktchat braucht Freundschaft, Gruppenchat aktive Mitgliedschaft.

Verwaltete Feeds brauchen eine Abobestätigung, danach Ereignis/Resync und einen Sync plus Änderungsmarkierung. Keine Dauerabfragen oder Offline-Ersatzabfragen; Entzug verbirgt gespeicherten Text.

Das exakte Original für Projekt und Spieler vor dem Senden speichern. Host und Sitzung begrenzen nur Anfragen. Unklare IDs, Zeiten, Texte oder Revisionen niemals ersetzen.

Ein Operations-404 beweist kein Scheitern. Das Original nach Timeout oder OPERATION_EXPIRED behalten; nur mit passendem Beleg abgleichen.

Ursprüngliche Meldungs-IDs und Begründung wiederholen. Status removed ist eine erfolgreiche Wiederholung; REPORT_EXPIRED erzeugt keine neue Meldung.

PHP simpleServer antwortet für alle Chatrouten mit 501 NOT_SUPPORTED.

Testet euer neues Feature.

Zwei bestehende Spielersitzungen nutzen: Projektkanal öffnen, einmal senden, Momentaufnahme lesen und eine gespeicherte Nachricht melden. Direktchat braucht Freundschaft, Gruppenchat aktive Mitgliedschaft.

Wählt im Dashboard dasselbe Projekt wie in eurer Spielkonfiguration.

Endpunkte
  • 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
Alle Endpunkte in der API-Referenz
Unser Vorschlag für den nächsten Schritt

Gebt jeder Runde einen Highscore.

Speichert den Score nach dem Spiel und zeigt, wer vorne liegt. Eure Verbindung und Spielersession nutzt ihr weiter.