UnityでsqLiteが使いたいだけなのに
Unityでデータベースを使いたいよChatGPT~!
と、相談すると、選択肢が以下のように出ました
Unityにおいて個人開発で使用できるデータベースはいくつか選択肢があります。以下はそのいくつかです:
SQLite:
軽量で埋め込み型のデータベースエンジンで、Unityでも利用できます。
ファイルベースのデータベースで、クロスプラットフォーム対応です。
Firebase:
Googleが提供するモバイルおよびウェブアプリケーション向けのプラットフォームで、リアルタイムデータベースや認証機能が含まれています。
UnityでFirebase SDKを使用することで、データの読み書きや認証などが容易になります。
Realm:
モバイルアプリケーション向けに特に設計されたデータベースで、Unityでも使用できます。
Realmはオブジェクト指向データベースであり、シームレスなオブジェクトの永続性を提供します。
PlayFab:
ゲーム開発者向けのクラウドベースのサービスで、Unityとの統合が容易です。
ユーザーデータ、プレーヤーアカウント、リーダーボード、アナリティクスなどを管理するために使用できます。
RESTful APIを利用する:
独自のバックエンドサーバーを構築し、UnityからRESTful APIを介してデータを取得・送信する方法もあります。
この場合、データベースとしてはMySQLやMongoDBなどを利用することが一般的です。
Object-oriented databases:
オブジェクト指向のデータベースは、Unityのオブジェクトとシームレスに統合できる場合があります。例えば、ObjectDBなどがあります。
データベースの選択はプロジェクトの要件によります。軽量さ、クロスプラットフォーム対応、リアルタイム性など、プロジェクトのニーズに最適なものを選択することが重要です。
なるほどありがとう。ほかのものもいつか使用することが必要だろうが、
今回はSQLiteにするよ!
以下はUnity Asset Storeなどで人気のあるSQLiteプラグインの例です:
これらのプラグインはSQLiteデータベースとのやり取りを容易にするためのクラスやメソッドを提供しています。使用するプラグインに関連するドキュメントやサンプルコードがあるか確認し、適切に統合してください。
ありがとう、SQLiteUnityKitはアセットストアに存在しないので、GitからダウンロードできるSQLite4Unity3dにしようと思う。
Gitからダウンロード
緑色のcodeボタンからzipをダウンロード
どうやら、ios,android,windowsで使用できるらしい。日本語でのクエリもできるという。さっそくダウンロードして解凍、readmeを読もう
README.mdによると
わかる
ふむふむでは使い方は?
なるほど最初に解凍したものの中にあったSQLite4Unity3d.zipをさらに解凍するのですね
解凍すると、ファイルがふたつ。mac用とwindows用ということだろうか…そんなのいるかな?
しかし、言う通りにするべきだろう。
AssetsフォルダにPluginsフォルダを作って、解凍したものを入れる。
続いて
SQLite.csファイルを、Scriptsフォルダにコピーします
コピーすると、SQLite.csが世界に二つあることになってしまうので、Scriptsの方を残して、SQLite4Unity3dの方は削除しましょう。
次にデータベースファイルがあるならばStreamingAssetsフォルダに入れる。
これで完了です。本当だろうか。StreamingAssetsフォルダを作ってないので、新規作成した。これで使えるようになる。が、どう使うかわからないので、
サンプルをいじりましょう。
サンプルをどう扱うのだろう。Exampleの中はこう
.metaってなんだ?いっぱいあるが…しかしまあ、なんというか、こいつがAssetの直下にあったらいいような雰囲気ですね。テスト用2Dプロジェクトを適当に作って、インポートしてみましょう
参考の動画にあわせていきたいが、動画のように開けなかったので手動で展開した。[CreateDBFromScript]のシーンを開く。
コンソールにも以下が
うん?SQLiteが動いていそうだなあ。
StreamingAssetsフォルダに以下が生成された!
DB Browser for SQLで中を確認してみると
サンプルでは、起動時にCreateDBScript.csを呼び出して、DataService.csのCreateDBを実行している。
このCreateDBのスクリプト内に、DropTable、CreateTable、InsertAll…と処理されているので、例えばボタン押下でそれが動けばいいやと思う。
この中でDB作成を書いてみよう
(ChatGPTに作ってもらいました)
using UnityEngine;
using UnityEngine.UI;
using SQLite4Unity3d;
public class DatabaseManager : MonoBehaviour
{
private SQLiteConnection _connection;
public Button yourButton;
private void Start()
{
// データベースファイルのパスを指定して接続
string databasePath = "Assets/StreamingAssets/data.db"; // StreamingAssets フォルダにデータベースがあると仮定
_connection = new SQLiteConnection(databasePath);
// テーブルが存在しない場合は作成
_connection.CreateTable<Person>();
// ボタンにクリックイベントを追加
yourButton.onClick.AddListener(OnButtonClick);
}
private void OnDestroy()
{
// アプリケーション終了時に接続を閉じる
if (_connection != null)
{
_connection.Close();
}
}
private void OnButtonClick()
{
// データの挿入例
InsertPerson(new Person { Name = "ButtonClicked", Age = 30 });
// データの取得例
var people = _connection.Table<Person>().ToList();
foreach (var person in people)
{
Debug.Log($"ID: {person.Id}, Name: {person.Name}, Age: {person.Age}");
}
}
private void InsertPerson(Person person)
{
_connection.Insert(person);
}
}
ボタンをアセットして、実行すると…
つらい戦いだったが、この調子でSELECT、UPDATE、DELETE、INSERTができそうな気がします。ヒイヒイ((´д`))
つまりどうすればいいか
SQLiteを使用したいプロジェクトを開いてPluginsフォルダに以下を保存
そのうち、
SQLite.csのファイルをScriptsのフォルダに移動してあげる。
データベースの場所として
StreamingAssetsフォルダを作成しておく。
これで、さきほどのスクリプトは動作します!
つらい戦いでした。
あの、もしかして上記スクリプトで実行したい場合は、別途モデルクラスを作っていないとエラーになりますので、以下を使用してください。
public class Person
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
public override string ToString()
{
return string.Format("[Person: Id={0}, Name={1}, Surname={2}, Age={3}]", Id, Name, Surname, Age);
}
}
そして、このスクリプトでは、アプリケーションが閉じられるまで接続が維持されるので、データベース接続のプールか、シングルトンパターンを使用して、データベース接続を再利用可能な状態にすることが良いでしょう。
誰かのお役に立ったら幸いです
この記事が気に入ったらサポートをしてみませんか?