iOSやAndroidではApplication内にデータを保存する方法として、SQLiteが使われています。
少ないデータであれば、PlayerPrefsを使用するだけで十分ですが、大量のデータを扱う場合にSQLiteを使えると便利です。
また、SQLiteは他の開発言語でも使えるので、Objective-CやJavaでの開発する場合でもデータはそのまま使用できるので汎用性に優れています。
今回はSQLiteが予めインストールされているMacで試しました。
- OS X 10.9.5
- SQLite 3.7.13
SQLiteUnityKitをgithubから取得する
今回、UnityでSQLiteを使う方法として、GithubにあるSQLiteUnityKitを使用します。
Busta117/SQLiteUnityKit · GitHub
SQLiteUnityKitを取得します。ターミナルからgitでクローンします。
$ git clone https://github.com/Busta117/SQLiteUnityKit.git
プロジェクトにSQLiteUnityKitを配置する
プロジェクトにSQLiteUnityKitを取り込みますが、そのままの配置ではなく、下記の図のように配置します。
StreamingAssetsフォルダを作成する
プロジェクトに「StreamingAssets」フォルダを作成します。StreamingAssetsファイルをそのままアプリに持っていけるフォルダです。
このフォルダにSQLiteのデータベースファイルを入れることで、そのままアプリに配置されます(ビルドしたときにエンコードなど余分な変換がされない)。
SQLiteデータベースファイルを作成する
今回は既にあるSQLiteデータベースファイルからUnityから取り出す方法を説明します。
なので、まずはターミナルからSQLiteを使用して、データベースファイルを作成します。
// StreamingAssetsフォルダに移動する
$ cd ~/Unity/SQLiteSample/Assets/StreamingAssets
// データベースファイル「config.db」を作成します
$ sqlite3 config.db
SQLite version 3.7.13 2012-07-17 17:46:21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
// userというテーブルを作成します
sqlite> create table user(id integer, name text, old integer, address text);
sqlite> .q
スプリクトを作成する
次にスクリプトを作成して、データベースからデータを追加・取得します。
スクリプト名は「Database.cs」とします。
using UnityEngine;
using System.Collections;
public class Database : MonoBehaviour {
// Use this for initialization
void Start () {
// Insert
SqliteDatabase sqlDB = new SqliteDatabase("config.db");
string query = "insert into user values(1, 'Yamada', 19, 'Tokyo')";
sqlDB.ExecuteNonQuery(query);
// Select
string selectQuery = "select * from user";
DataTable dataTable = sqlDB.ExecuteQuery(selectQuery);
string name = "";
foreach(DataRow dr in dataTable.Rows){
name = (string)dr["name"];
Debug.Log ("name:" + name);
}
}
// Update is called once per frame
void Update () {
}
}
スプリクトをシーン上のゲームオブジェクトに追加します。ここでは「DatabaseObject」に追加しました。
実行する
Playボタンを押して、実行すると、Consoleビューに指定したデータを取得できたことを確認してください。