久しぶりにゲーム制作をやったので、今回はその時にハマった事を。
ゲーム自体は某ノベルゲーなのですが、そのテキストや背景、BGMの情報を保存するのに都合が良かったのでSQLiteを使う事にしました。
スタンドアロンなゲームで特に通信はしないので、DB使おうと思ったらほぼSQLiteしか選択肢が無かったです。
仕組み
仕組みとしてはライブラリ経由でDBにアクセスして、一行ずつレコードを取ってくる仕組みになっています。
タップする度にselectしますが、内部DBだしまぁパフォーマンスは問題ないかなと思いこうしました。
チャプター毎に一気に取得するやり方もやってみたのですが、長い章だとメモリ使用量がかなり上がったのでやめました。
Webサーバーと違ってスケール出来ないですからね・・
プラグインをいれる
sqliteを使うにはプラットフォームに応じたプラグインを入れる必要があります。
プロジェクトのPlugin/Androidディレクトリにlibsqlite3.soを入れればいいのですが、ここで一つ問題が出てきました。
古い端末では動くのですが、新しめ(Android9搭載)の端末だと動かなかったのです。
どうやら調べていくとプラグインは64bitと32bitでわけないといけないらしく・・・公式から最新のプラグインを落として2つ入れる事で動くようになりました。
ちなみにaarパッケージでやるのが今風らしいのですが、上手く動かなかったので直接soファイルを配置する方法を選択しました。
DBが更新されない
ここまででAndroid端末でDBから取得が出来るようになったのですが、次にボイスが再生できないという問題にブチ当たりました。
最初は「メモリ的にキツいからかな?」と思ったのですが、取得するデータ量を減らしても問題なかったです(そもそもログに何もでていなかったので当然だが)
もしかしてDB更新されていないのでは・・・と思ってテキスト変更してみたら反映されていなくて当たりでした。
しかし原因は分かったけど、どうしてそうなるのかが不明なままでした。
キャッシュだろうなと思い、ライブラリの動作を追っても普通にstreamingAssetsからコピーしているだけで特に問題なし・・・
そもそもアンイストールしても残っているのでますます?でした。
ならばとDB名を変更して取得するようにすると、正常に反映されるようになりました。
その後、更新してもちゃんと反映されるようになったので、おそらくこれで問題ないはず。
原因はわからずじまいでしたが、ユーザーが触れない領域にキャッシュでもしていたのでしょうか。
最後に
そんな感じで苦労しながら作ったゲーム。無料で配信中です。
play.google.com