Olá. Neste artigo, veremos como usar banco de dados embarcados com Unity3D usando o SQLite.
Um dos processos mais comuns em jogos e aplicações é o de salvar informações em algum lugar. Elas serão usadas mais tarde para, por exemplo, quando temos que salvar o estado do jogo para fecharmos o jogo.
SQLite no Unity3D com C#
É possível realizar esse processo de diversas formas – inclusive, no Unity3D existe a class PlayerPrefes, entre outras formas que precisariam de mais alguma implementação.
Essas soluções são muito boas e, em muitos casos, resolvem por completo a maior parte das situações. Contudo, quando estamos falando de um jogo de RPG com muitos personagens, atributos, classes etc., por exemplo, imagino que algo assim tão simples não seja a solução ideal.
Uma boa opção para tais situações é usar banco de dados relacionais como o SQLite que vai embarcado junto com o jogo e usa a linguagem SQL para realizar consultas.
Então veremos como fazer a integração entre o Unity3D com o SQLite usando C#.
Alerta!
Nesse artigo, julgo que você já tem algum conhecimento com Unity3D e com SQL.
Se você atende a esses requisitos, vamos lá, mas não se preocupe que aqui não serão abordados temas muito complicados referentes a essas tecnologias.
Outro ponto que quero deixar claro aqui é que este artigo não tem intenção de ser definitivo, mas sim algo para apresentar as funcionalidades.
Instalação
Primeiro, você precisa criar um projeto no Unity3D – chame-o de, por exemplo, TesteSQLite; não importa se é 2D ou 3D. Enquanto o Unity3D está preparando o projeto para você, vamos fazer os downloads do que vamos precisar para o projeto clicando aqui.
Crie uma pasta chamada “Plugins” dentro do diretório Assets e descompacte o conteúdo do arquivo baixado dentro dela.
Note que um dos arquivos é o sqlite3.dll. Você deve obter a versão ideal para o seu sistema operacional x86 ou 64bit. Para isso, basta você encontrá-las neste site.
Vamos ao script
Agora crie um arquivo C# chamado BancoDeDados.cs, e nele vamos implementar a seguinte lógica:
- Criar a conexão;
- Inserir dados;
- Recuperar os dados inseridos.
Antes de começarmos, você vai precisar adicionar as seguintes linhas no início do arquivo:
using System.Data; using Mono.Data.SqliteClient
Criando a conexão
Aqui vamos criar nosso arquivo que será o “data file” do banco e uma tabela com dois campos apenas para demonstração.
// caminho para o arquivo do banco string urlDataBase = “URI=file:MasterSQLite.db” void Iniciar() { IDbConnection _connection = new SqliteConnection(urlDataBase); IDbCommand _command = _connection .CreateCommand(); string sql; _connection .Open(); // assim só criaremos a tabela uma vez string sql = “CREATE TABLE IF NOT EXISTS highscores (name VARCHAR(20), score INT)”; _command.CommandText = sql; _command.ExecuteNonQuery(); }
Inserindo alguns dados
Agora vamos popular nossa tabela. Deixe a função como pública para podermos chamá-la por um botão de UI.
Repare que aqui não há segredo, se você já está minimamente habituado com SQL.
public void Inserir() { string sql = “INSERT INTO highscores (name, score) VALUES (‘Me’, 3000)”; _command.CommandText = sql; _command.ExecuteNonQuery(); }
Recuperando os dados
E finalmente recuperamos o que acabamos de inserir. Esse método também deve ficar público para ser acessado pelo editor.
Note a diferença nos comandos de execução para gravar algumas coisas no banco usando o ExecuteNonQuery. Para recuperar, executamos o ExecuteReader, que nos retorna um Reader por meio do qual podemos “varrer” e obter os registros.
void Recuperar() { string sqlQuery = “SELECT value,name, randomSequence ” + “FROM PlaceSequence”; dbcmd.CommandText = sqlQuery; IDataReader reader = dbcmd.ExecuteReader(); while (reader.Read()) { int value = reader.GetInt32(0); string name = reader.GetString(1); int rand = reader.GetInt32(2); Debug.Log( “value= “+value+” name =”+name+” random =”+ rand); } }
Pronto, galera. Agora vamos voltar ao editor do Unity3D e criar uma cena como a da imagem:
Bastando adicionar as funções públicas aos eventos click dos botões.
Fico por aqui. Para dúvidas e/ou sugestões, pode ficar à vontade nos comentários.