Spielideen & Features

Euer nächstes Feature

Spielerstatistiken

Runden, besiegte Gegner und Bestwerte gemeinsam melden: als Summe, Maximum, Minimum oder letzten Wert.

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

Dein Spiel meldet eine vollständige Sitzung gemeinsam und zeigt aktuelle Zähler und Zeiträume.

Video folgt

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

Spielerstatistiken

Dasselbe Projekt vorbereiten

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

    Spielerstatistiken →
  2. Erstellt diese Testeinträge im Dashboard-Formular oder verwendet passende vorhandene Einträge. Die Werte sind Beispieldaten, kein aktueller Projektstand.

    Statistikdefinitionen
    kills: mode=sum, reset=none; best_score: mode=max, reset=none

    Summe addiert jede Meldung. Maximum und Minimum behalten den Bestwert; letzter Wert ersetzt ihn. Maximum, Minimum und letzter Wert beginnen mit der ersten Meldung. Erlaubt sind vorzeichenbehaftete ganze Zahlen im sicheren Zahlenbereich.

  3. Speichert die Einträge, ladet sie neu und prüft sie vor dem Beispiel. Erhaltet andere vorhandene Definitionen.

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 RunReviewedAction() ausdrücklich über einen Button oder eine Szenenaktion auf. Allein das Öffnen der Datei sendet keine Anfrage.

C#
Assets/Scripts/StatisticsDemo.cs
horizOn-Aufruf
1using PM.horizOn.Cloud.Objects.Network.Requests;
2using UnityEngine;
3using PM.horizOn.Cloud.Core;
4using PM.horizOn.Cloud.Manager;
5​
6// Existing SDK/project configuration and authenticated player session required.
7// Call RunReviewedAction explicitly after reviewing this example and its data.
8// Lies zuerst einen Snapshot. Behalte bei Wiederholungen dieselbe
9// Operations-ID und die ursprünglichen Meldungen. Abgelaufene oder
10// unbestätigte Ergebnisse erfordern einen Abgleich statt einer
11// automatischen neuen ID.
12// This explicit action reports the shown persisted batch.
13public sealed class StatisticsDemo : MonoBehaviour
14{
15 public async void RunReviewedAction()
16 {
17 var sessionUser = UserManager.Instance.CurrentUser;
18 if (sessionUser == null || !sessionUser.IsValid()) return;
19 var manager = StatisticsManager.Instance;
20 var snapshot = await manager.GetStatistics();
21 if (snapshot == null) { Debug.LogWarning(manager.LastErrorCode); return; }
22 string pendingKey = "horizOn_statistics_pending_" + snapshot.userId;
23 var pending = PlayerPrefs.HasKey(pendingKey)
24 ? JsonUtility.FromJson<UpdateStatisticsRequest>(PlayerPrefs.GetString(pendingKey))
25 : new UpdateStatisticsRequest {
26 userId = snapshot.userId, operationId = manager.CreateOperationId(),
27 updates = new[] { new StatisticUpdate("kills", 3), new StatisticUpdate("best_score", 250) }
28 };
29 string originalJson = JsonUtility.ToJson(pending);
30 PlayerPrefs.SetString(pendingKey, originalJson);
31 PlayerPrefs.Save();
32 var result = await manager.UpdateStatistics(pending.updates, pending.operationId);
33 if (result == null) {
34 // Keep the saved ID and batch. Reconcile OPERATION_EXPIRED before a new logical report.
35 Debug.LogWarning(manager.LastErrorCode);
36 return;
37 }
38 // A late success for O1 must never acknowledge a newer pending O2.
39 if (PlayerPrefs.GetString(pendingKey, null) == originalJson) {
40 PlayerPrefs.DeleteKey(pendingKey);
41 PlayerPrefs.Save();
42 }
43 foreach (var counter in result.values) Debug.Log(counter.key + "=" + counter.value);
44 }
45}
Vollständiges SDK-Beispiel öffnen ↗

Testet euer neues Feature.

Dein Spiel meldet eine vollständige Sitzung gemeinsam und zeigt aktuelle Zähler und Zeiträume.

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

Endpunkte
  • GET/statistics
  • GET/statistics/definitions
  • POST/statistics
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.