Idées et fonctionnalités de jeu

Votre prochaine fonctionnalité

Objets partagés

Partagez des données de jeu opaques avec des politiques d’accès explicites, des requêtes indexées et les révisions initiales.

SDK : developSession de joueur requise
Unity
Illustration de Objets partagés
Votre résultat visible

Consultez l’utilisation du propriétaire avant toute création. La création utilise la révision de cette utilisation ; la mise à jour et la suppression utilisent la révision initiale de l’objet. Le propriétaire, le groupe et l’expiration définie à la création restent inchangés.

Vidéo à venir

Cette étape n’a pas encore de vidéo. Le guide et la demande MCP sont utilisables.

Objets partagés

Préparer le même projet

  1. Sélectionnez dans le tableau de bord le même projet que dans la configuration de votre jeu.

    Objets partagés →
  2. Créez ou réutilisez ces entrées de test dans le formulaire du tableau de bord. Ce sont des exemples, pas les données actuelles.

    Clé
    bases
    Politique de lecture
    all
    Politique d’écriture
    owner
    Position sur la grille
    true
    Octets maximum par objet
    1024
    Objets maximum par propriétaire
    1

    Les clés restent réservées. Après la première utilisation, les politiques, le schéma de recherche, le TTL et la position sont immuables. L’archivage bloque les nouvelles écritures ; la lecture et la suppression restent possibles.

    Ce premier exemple lit les données. Il ne crée ni groupe, ni partie, ni objet. Une liste vide est une première réponse valide.

  3. Enregistrez, rechargez et vérifiez les entrées avant l’exemple. Conservez les autres définitions.

Intégrer cette fonctionnalité

Vous pouvez consulter le guide. Son exécution nécessite une clé de projet active. Préparer le projet

SDK installé, configuration du projet importée et joueur connecté.

Cet exemple du SDK utilise develop. Vérifiez que les API nécessaires existent dans votre SDK installé.

Terminez la connexion du démarrage rapide avec le joueur choisi. Appelez ReadWorldMap() via un bouton ou une action de scène explicite. Ouvrir le fichier seul n’envoie aucune requête.

C#
Assets/Scripts/SharedObjectsDemo.cs
Appel horizOn
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3using PM.horizOn.Cloud.Objects.Network.Responses;
4​
5public sealed class SharedObjectsDemo : MonoBehaviour
6{
7 // Initialize/connect and restore the existing player in the Quickstart first.
8 // Wire an explicit player action; do not add this read to a startup/poll loop.
9 public async void ReadWorldMap()
10 {
11 var user = UserManager.Instance.CurrentUser;
12 if (user == null || !user.IsValid()) return;
13 var result = await SharedObjectsManager.Instance.QueryObjects(user.UserId, "bases", new SharedQuery {
14 mode = SharedQueryMode.Rectangle,
15 minX = -10, maxX = 10, minY = -10, maxY = 10, limit = 20
16 });
17 if (!result.IsSuccess) {
18 Debug.LogWarning(result.ErrorCode);
19 return;
20 }
21 foreach (var item in result.Data.objects) {
22 byte[] bytes = item.data; // Opaque game bytes; validate your game's own format.
23 Debug.Log($"Object {item.id}: {bytes.Length} bytes");
24 }
25 // Respect result.Data.pollAfterSeconds; no automatic poll or next-page loop.
26 // Keep exact dataBase64 and typed search metadata unchanged on metadata edits.
27 // Persist original target, bytes and If-Match revision before a single mutation.
28 // Unknown CREATE: explicit GetRecoveryUsage/QueryRecoveryObjects; never resend.
29 // Generic/defense/ranked VA starts share one start/submit lease; do not replace a pending run.
30 // Trusted validation and durable ordinary Inbox delivery belong to the game backend.
31 }
32}
Ouvrir l’exemple SDK complet ↗

Carte du monde

Stockez les bases des propriétaires sous forme d’octets opaques. Interrogez explicitement un rectangle configuré de grille à coordonnées entières ; utilisez la révision initiale de l’objet pour la mise à jour. La position sert d’index de requête et ne valide pas les règles du jeu.

PvP asynchrone

Choisissez un adversaire par une requête d’entiers bornée et non uniforme. Chargez ses octets de défense et validez la partie avec une exécution Validated Actions contrôlée par le serveur. Seul un backend de confiance décide du résultat et envoie une notification Inbox immuable.

Utilisez les sessions de joueur correspondantes, une intention initiale d’écriture conservée durablement et des lectures explicites et bornées. La validation fiable du résultat et la livraison Inbox relèvent du backend du jeu ; les Account Keys ne doivent jamais figurer dans les builds du jeu.

Testez votre nouvelle fonctionnalité.

Consultez l’utilisation du propriétaire avant toute création. La création utilise la révision de cette utilisation ; la mise à jour et la suppression utilisent la révision initiale de l’objet. Le propriétaire, le groupe et l’expiration définie à la création restent inchangés.

Sélectionnez dans le tableau de bord le même projet que dans la configuration de votre jeu.

Points de terminaison
  • GET/shared-objects/collections
  • GET/shared-objects/{collection}/usage
  • GET/shared-objects/{collection}/objects/{objectId}
  • POST/shared-objects/{collection}/query
  • POST/shared-objects/{collection}/objects
  • PUT/shared-objects/{collection}/objects/{objectId}
  • DELETE/shared-objects/{collection}/objects/{objectId}
Tous les points de terminaison dans la référence API
Notre suggestion pour la suite

Donnez un meilleur score à chaque partie.

Enregistrez le score après une partie et montrez qui est en tête. Continuez avec votre connexion et la session du joueur.