Banco de Dados

24 out, 2016

Usando SQLite no Unity3D com C#

Publicidade

sqliteunity

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.

im-1

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:

im-2

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.