UnityでSQLiteを使ってガチャガチャを作ってみる
クリッカーゲームを作りたくてアイディア練ったいたときに
ガチャガチャみたいなシステムを入れてみたくなった
自分用に備忘録として残しておく
ガチャガチャを作りたい
どうやったら実現できるのか考えてみる
- ガチャから出てくるもの(ここでは武器)のデータを作る
- ゲーム内で武器データをランダムで一つだけ取得する
- 取得したデータを保存する
こんな感じでいけるのでは?ととりあえず深く考えずに作ってみることにした
取得する元のデータを作る
こういうデータのことをマスターデータと言うらしい(ド素人)
調べてみるとCSVやExcelで作ったデータをSQLiteなどで管理している人が多そうだった
情報量も多そうだしSQLiteを使ってみる
GoogleSpreadSheetのアドオンにシート丸ごとSQLiteに変換してくれるものがあったのでこれを使う
SQLiteをUnityで使えるようにする
有料のアセットなどもある
今回はSQLiteUnityKitを使う
blog.livedoor.jp
上記のサイトを参考に導入した
sqlite3.dll関連を配置という項目で
64bit版をみつけるのに苦労しました…
http://blog.livedoor.jp/nyangostar/archives/24903485.html
とありますが現在はSQLite公式に64bit版も一緒に置いてある
解凍すると32bit版、64bit版もファイル名が一緒なのでUnityのフォルダに入れるとき注意する
ガチャガチャのようなものを実装してみる
データを取得して作っておいた空のテーブルに追加する
SqliteDataBase weaponDB = new SqliteDataBase("WeaponMasterData.sqlite"); //weaponsテーブルからランダムで一件取得してget_weaponsテーブルに追加 string query = "INSERT INTO get_weapons SELECT * FROM weapons ORDER BY RANDOM() LIMIT 1"; weaponDB.ExecuteQuery(query);
追加できた
string query= "INSERT INTO get_weapons SELECT * FROM weapons WHERE weapon_category='Assault' ORDER BY RANDOM() LIMIT 1";
とすることでweapon_categoryがAssaultの中から一件取得してくれる
シングルクォーテーションを忘れると怒られる
※TEXTの場合だけだと思われ。INTEGERとかだったらいらない(?)
こいつハゲればいいのにSQLiteで例えばweaponcategoryフィールドがあったとしてその中のassaultってついてるものの中からランダムで一件だけ取りたい時画像のように書いてもエラーになってしまう。どうしたらいいんだろう・・・? pic.twitter.com/wZLVZZgKJq
— きりしま@ランゲーム-オクタ-公開中! (@kirisima517) 2017年3月23日
データを使う
ガチャガチャから出てきたデータを使う
string query = "SELECT * FROM get_weapons" DataTable getWeaponData = weaponDB.ExecuteQuery(query); string weaponCategory = "", name = "", detail = ""; int id = 0, damage = 0; foreach(DataRow dr in getWeaponData.Rows) { id = (int)dr["id"]; weaponCategory = (string)dr["WeaponCategory"]; name = (string)dr["name"]; detail = (string)dr["detail"]; damage = (int)dr["damage"]; Debug.Log("ID:" + id + " WeaponCategory:" + weaponCategory + " Name:" + name + " Detail:" + detail + " Damage:" + damage); }
とりあえず完成
あとは焼くなり煮るなり好きにする
この方法が正解なのかわからない
終わり