Ideias e funcionalidades do jogo

A tua próxima funcionalidade

Objetos partilhados

Partilhe dados opacos do jogo através de políticas de acesso explícitas, consultas indexadas e revisões originais.

SDK: developRequer uma sessão de jogador
Unity
Ilustração de Objetos partilhados
O resultado visível

Consulte a utilização do proprietário antes de criar. A criação usa a revisão dessa utilização; a atualização e a eliminação usam a revisão original do objeto. O proprietário, o grupo e a expiração definida na criação mantêm-se inalterados.

Vídeo em breve

Este passo ainda não tem vídeo. O guia e o pedido MCP já podem ser usados.

Objetos partilhados

Preparar o mesmo projeto

  1. Seleciona no painel o mesmo projeto que na configuração do teu jogo.

    Objetos partilhados →
  2. Criem ou reutilizem estas entradas de teste no formulário do painel. São valores de exemplo, não dados atuais.

    Chave
    bases
    Política de leitura
    all
    Política de escrita
    owner
    Posição na grelha
    true
    Máximo de bytes por objeto
    1024
    Máximo de objetos por proprietário
    1

    As chaves permanecem reservadas. Após a primeira utilização, as políticas, o esquema de pesquisa, o TTL e a posição são imutáveis. Arquivar bloqueia novas escritas; a leitura e a eliminação continuam disponíveis.

    Este primeiro exemplo lê dados. Não cria grupos, partidas nem objetos. Uma lista vazia é uma primeira resposta válida.

  3. Guardem, recarreguem e verifiquem as entradas antes do exemplo. Preservem as restantes definições.

Integra esta funcionalidade

Podes consultar o guia. Para o executar, precisas de uma chave de projeto ativa. Preparar o projeto

SDK instalado, configuração do projeto importada e jogador com sessão iniciada.

Este exemplo do SDK usa develop. Verifica se as API necessárias existem no SDK instalado.

Concluam a ligação do início rápido com o jogador escolhido. Chamem ReadWorldMap() através de um botão ou ação explícita da cena. Abrir o ficheiro não envia pedidos.

C#
Assets/Scripts/SharedObjectsDemo.cs
Chamada ao 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}
Abrir o exemplo SDK completo ↗

Mapa do mundo

Guarde as bases dos proprietários como bytes opacos. Consulte explicitamente um retângulo configurado de grelha com coordenadas inteiras; atualize com a revisão original do objeto. A posição é um índice de consulta e não valida regras do jogo.

PvP assíncrono

Escolha um adversário através de uma consulta de inteiros limitada e não uniforme. Carregue os seus bytes de defesa e valide a partida com uma execução Validated Actions controlada pelo servidor. Apenas um backend de confiança decide o resultado e envia uma notificação Inbox imutável.

Use as sessões de jogador correspondentes, uma intenção original de escrita guardada de forma duradoura e leituras explícitas e limitadas. A validação fiável dos resultados e a entrega Inbox pertencem ao backend do jogo; as Account Keys nunca devem ser incluídas nas builds do jogo.

Testa a tua nova funcionalidade.

Consulte a utilização do proprietário antes de criar. A criação usa a revisão dessa utilização; a atualização e a eliminação usam a revisão original do objeto. O proprietário, o grupo e a expiração definida na criação mantêm-se inalterados.

Seleciona no painel o mesmo projeto que na configuração do teu jogo.

Endpoints da API
  • 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}
Todos os endpoints na referência da API
A nossa sugestão para o próximo passo

Dá uma pontuação máxima a cada partida.

Guarda a pontuação depois de uma partida e mostra quem está à frente. Continua a usar a ligação e a sessão do jogador.