うにのトゲは刺さると痛い(´・ω・`)-38

スコア用のdbを追加

いまひとつAndroid10での新規データ書き込みがわからず…(´・ω・`)

ぐぐったエントリ等で説明されていて問題ないはずのApplication.persistentDataPathで取れた"~/sdcard/0/~"みたいなパスでは書き込みを拒絶された。 ← 後でちょっと違う他のコードで試したら書き込めた(ノ∀`)ヨクワカラン

実機デバッグで確認したのだがなぜなんだぜ(´・ω・`)

なんかよくわからんのと今まで各ゲームモードでそれぞれ異なるjsonファイルを吐き出させていたのが余り美しくなかったので、取り敢えずsqlite経由でdbに書き込めるか試す。

でけた(・∀・)
というわけでscore.dbを新たに追加。


と書くと事もなくスムーズに行ったように聞こえるが、紆余曲折があった。半分くらいは自分由来のトラブルであったが(ノ∀`)

  • score.dbのレコードで、ユニークなプライマリーキーフィールドをどうするか悩む。唯一、string型のdatetimeがその条件を満たせなくもないが、あんまり宜しくない。(新規データ作成時に同一日時でデータ作成してたり、そもそもstring型をプライマリーキーにするのに何故か抵抗があったw)
    =>結果、AutoIncrement+PrimaryKeyのidフィールドを設定した。
  • 今までは古い10件のレコードをtempリストにコピー&現プレイ結果のレコード追加、pointの多寡で入れ替えて、上位10件を元のリストに戻すという風にやっていたのだが、score.dbのレコードでAutoIncrement+PrimaryKeyのidフィールドを設定してしまったので、ニューレコードだった場合にidをどうすればいいかわからなくなる(ノ∀`)
    => 結果、取り敢えずnullを入れればInsertは出来るとわかり、そうした。
    => 最終的に並び替えた一番最後(点数が低い)レコードのidを取得、レコードを順番になめていってidがnullのものがあったらidを代入して、UPDATE文を呼んでdb更新するようにした。
  • 当初、使ってるDataTableクラスがC#のSystem.Data.DataTableクラスだと思い、Copy()メソッドを使おうと思ったが、これはSQLiteUnityKit独自のクラスでCopy()メソッドを持ってなかった(ヽ'ω`)

    => 結果、 単純にRowsをコピーするメソッドとついでにリスト入れ替えメソッドを追加した。
    C# Listを自由に並び替える

  • 当初、StreamingAsset内のdbの中身を見て、「あれー、vsとeditor上では更新出来てるのに、dbの中身は変わってない…だと……( ;・´ω・`)ゴクリッ」と悩んだが、
    SQLiteUnityKitの挙動として、Application.persistentDataPathにdbをコピーして使用しているらしい。Windowsで言うと"C:\Users\ユーザー名\AppData\LocalLow\パッケージ名\ゲーム名"の下にdbがあり、きちんと更新されていた(ノ∀`)
    UnityでSQLiteを使用する方法

参考:
SQLiteで最も速く複数行INSERTする方法
Insert into … values ( SELECT … FROM … )

なんでUPDATE文だとINSERT文のようにフィールド名を最初に書くやり方が出来ないんだろうか(´・ω・`)?
まあ今回は一件のみの更新なのでいいんだけども。まあ対象が沢山ある場合は更新用SQL文を生成するメソッドを作ればいいのか。
SQLite3でデータを更新:UPDATE


何もしてないのにadmob関連が壊れた(・∀・)

なんかエラーが出るようになったので、resolverを使ったり再インポートしたけど、他には何もしてないのに壊れた(・∀・) ← やっぱりしてる

ぐぐる。

なんか以下の太字部分を削ると直るとか…

"Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml");

[Unity] AndroidManifest.xml is missing. の対処法

なんかバグじゃなくて、フォルダ構造が変わっていて古いバージョンのadmobからアップグレードすると発生するとかどうとか…

This happened because you upgraded from an old version of admob.
From the version 5.2.0 the folder structure was changed.

Build Error. AndroidManifest.xml is missing. #1493

結論から言うと試してみても直らなかった(ノ∀`)

最終的にadmob絡みを全部削除して改めてUnityパッケージで入れたら解決した。


若干、呼び出すコードが変更されていたので書き換えた。
appidは"Assets\GoogleMobileAds\Resources\GoogleMobileAdsSettings.asset"のインスペクターで設定したけど、これでいいんだろうか?
editor上ではTestAdのバナーが表示されてるけど、実機だと出てきてないな…
まあこれは後回しでいいわ(・∀・)

参考:
バナー広告


bundletool

今回は実際の使用はほとんどしなかったけれども、aarからapkを生成したり、端末へと手動インストールする際に使用するものらしい…

bundletool
App Bundle対応


エミュレータ絡みで上手く行かない(´・ω・`)

なぜかうちの環境ではam64-v8a系のAVDを作成しても、"amdvlk64.dll"等のエラーで起動しない。
Can't change emulated performance of AVD in Android Studioにあるように、コマンドラインから起動したり、gpuとかのオプションをいじくったりしたが上手く行かず…(ヽ'ω`)

s86_64系のAVDは起動するけれども、Unity側でx86系でx86系用のサポートが選択できない…

Android サポートに関するお知らせ:64 ビット対応および App Bundle サポートの 2017.4 LTS バックポート

Unity では、Android の ARM 64 ビットサポートを追加した一方で、x86 ベースの Android の使用状況の調査も行いました。その結果、x86 ベース Android デバイスの市場への供給は非常に限られたものであり、Unity の x86 ベース Android サポートの導入も非常に狭い範囲に留まったことが分かりました。このため、x86 ベースの Android サポートはバージョン 2019.2 をもって廃止となり、Unity 2019.3 をもって完全に削除されます。

とあった…(ヽ'ω`)

セカンドPCに2019.1の環境を作ってなんとかしようとするも、今使っている2020.x系でC#8の記法等を利用しているために色々と書き直しの問題が……つーかプロジェクトのダウングレード時になんかエラーが出て先に進まない…_| ̄|○

取り敢えず、今の所諦めることにする。
今使ってるPCが第5世代のCore i5を積んでる古いPCだから駄目なのだろうか…
Hyper-VやHXAM辺りはきちんとやっているんだけども…


コードの改修はそれなりにしたけれども、特筆すべきことは少なく、いつも以上に内容のないエントリになったが、こういう日記的な作業内容を記録しておかないと後々苦労するので、怠らないようにしなければならない(`・ω・´)