Alguns jogos incríveis foram criados usando o Unidade plataforma. Alguns podem ser vistos no Unity Apresentação do aplicativo seção. Por mais impressionantes que sejam essas criações, há um componente central ausente em todos os jogos criados com o Unity: um banco de dados local.
No Unity, um banco de dados hospedado localmente pode manter os dados do jogo e melhorar a jogabilidade - o jogo não termina nem fica lento quando um a conexão de rede for interrompida. A pontuação máxima de um jogador no jogo também pode ser salva e sincronizada com um banco de dados remoto quando a conexão de rede for restaurada.
Nesta postagem do blog, exploraremos como o Unity e o banco de dados NoSQL, Couchbase, podem trabalhar em conjunto para fornecer excepcional experiências para jogadores de jogos móveis.
Couchbase com jogos Unity
Para começar com o Couchbase Mobile para Unity, há um ótimo tutorial que referenciaremos, que pega um jogo Unity existente e adiciona um banco de dados local. A primeira parte é trazer as estruturas do Couchbase Lite. No aplicativo de exemplo, inclua o Couchbase na parte superior do arquivo GameController.cs com:
1 2 3 4 |
Usando Couchbase.Leve; Usando Couchbase.Leve.Unidade |
Crie seu banco de dados de jogos Unity
No jogo que estamos criando, os dados do jogador são armazenados em um documento e obteremos o documento que contém a pontuação máxima do jogador. Para recuperar o banco de dados ou criar o banco de dados se ele não existir, faremos referência ao Couchbase Gerente classe.
1 2 3 |
var db = Gerente.Instância Compartilhada.GetDatabase("spaceshooter"); |
Recuperar o documento do jogador
Faremos referência aos dados do jogador no jogo por meio de um documento chamado "player_data". Ao fazer referência à variável do banco de dados, db, quando solicitarmos o documento, o documento será associado ao banco de dados "spaceshooter". Chamamos a variável ObterDocumento e passe o nome do documento. Se o documento não existir, ele será criado.
1 2 3 |
var doc = db.ObterDocumento ("player_data"); |
Os dados são descritos como propriedades de um documento e, para definirmos a pontuação máxima de um usuário em um jogo, modificaremos as propriedades do documento e salvaremos uma nova revisão. Para fazer isso, chamaremos a função Atualização do Couchbase.
1 2 3 4 5 6 7 8 9 10 |
doc.Atualização(rev => { var adereços = rev.Propriedades do usuário; adereços["high_score"] = newHighScore; rev.SetUserProperties(adereços); retorno verdadeiro; }); |
O valor agregado de ter um banco de dados local para o seu jogo é que as propriedades do jogo podem ser salvas no dispositivo sem depender da sua rede.
Replicar dados locais
Ao criar pontos de extremidade de replicação, podemos enviar dados locais para o servidor remoto. Para fazer isso, faremos referência ao CreatePushReplication da API do Couchbase e passar o URL do ponto de extremidade com o qual sincronizar. Para iniciar a replicação, executamos "Start()" na variável.
1 2 3 4 5 6 |
var empurrar = db.CreatePushReplication(SYNC_URL); empurrar.Início(); |
Os dados são mantidos localmente e também no ponto de extremidade remoto fornecido, se a conexão estiver disponível.
Sincronizar dados remotos
Obter os dados mais recentes de um ponto de extremidade remoto é tão simples quanto salvá-los localmente e sincronizá-los. Para criar uma replicação pull única, primeiro obteremos um banco de dados chamando o método "GetDatabase" e passando o nome do banco de dados - neste caso, "spaceshooter". Mas agora, em vez de atualizar nosso servidor remoto com dados locais do nosso dispositivo com uma "PushReplication", executaremos uma "PullReplication" a partir do endpoint remoto
1 2 3 4 5 6 7 |
var db = Gerente.Instância Compartilhada.GetDatabase("spaceshooter"); var puxar = db.CreatePullReplication (SYNC_URL); puxar.Início (); |
E, como anteriormente, a chamada do método Start() na variável iniciará o processo de replicação de sincronização de dados do endpoint remoto para o dispositivo.
Recuperar dados do jogador
Para examinar o que temos em nosso banco de dados "spaceshooter", podemos fazer referência à variável que representa o banco de dados e verificar se o documento "player_data" está disponível:
1 2 3 4 5 6 7 |
var doc = db.GetExistingDocument ("player_data"); se (doc != nulo &lificador;&lificador; doc.Propriedades do usuário.Contém a chave("high_score")) { highScore = Converter.ToInt32(doc.Propriedades do usuário["high_score"]); } |
Para recuperar a pontuação máxima do jogador, agora preencheríamos a variável highScore com o valor da chave 'high_score'.
Conclusão
Há vários motivos excelentes para empregar um banco de dados local em um design de jogo Unity. Com o Couchbase Mobile, os jogos Unity podem executar atividades locais, como salvar seu estado local, e configurar serviços de sincronização para coordenar a consistência das informações entre as instâncias do aplicativo.
Conclusão: quanto mais rico for seu ambiente de jogo local, e quanto menos dependente da rede a experiência de jogo do Unity é para a jogabilidade - quanto mais confiante você estará adicionando e serviços cada vez mais sofisticados que podem sincronizar o estado em uma rede de aplicativos.
No próximo blog, exploraremos formas adicionais Couchbase Mobile pode aprimorar o design do jogodesenvolvimento e diversão.