オセロ制作記録 第5章:21日目~25日目

unity2019.3.10

androidStudio4.1

21日目:ランキング実装の準備

[add]新規追加

  • Firebase firestore導入途中

というわけで、公開して1日経った。

ダウンロード数0だった……。

くそぉ。

ちゃんと動くかどうかの確認ぐらいできるかと思ったけど全くマッチングしないとは……。

まだ形が出来ただけだからそこまで多くDLされても困るっていうのもあったけど、まさか0とは……。

やっぱりAdwordsで多少は広告打たないと無理か。

給付金入ったら広告にぶっこむギャンブルに挑戦してやろうかな。

愚痴はさておき、ダウンロード数伸びないにしても、まだ実装したい機能は沢山あるし、そっちに意識を向けよう。

ランキング機能を実装することにした。

以前はこのサイトのレンタルサーバーにPHPを使ってアプリにデータを配信してたけど、今回はFirebaseを使う。

Admobともリンクできるし、なんならGoogleAnalyticsともリンクできるからAndroidから接続するなら何かと出来ることが増えるかもしれないし。

というかAndroidアプリならUnityAnalyticsよりもGoogleAnalyticsを使うべきだったかもしれない。

ユーザーが少ないうちは無料だし。

色々迷った。

kotlinをちょっと使ってみたかったのでランキング機能くらいなら練習に良いかとも思ったけど、またの機会にする。VPSもレンタルしなきゃだし。

しかし、FirebaseSDKがUnity用にパッケージであったんだけどインポートしたらエラーが出た。

Forumを参考にして、

[ExternalDependencyManager]と[PlayServiceResolver]フォルダを一度消して、

[ExternalDependencyManager]の最新版を再度インポートしなおしたらなんとかなったけど。

インポート時のエラーは治ったけど、ビルド時にエラー出る。プラグインが衝突している場合に投げられるエラーかもしれない。検索した感じ。

[PlayServiceResolver]はプラグインの衝突を防ぐためにAndroidで生成される.gradleのdependenciesを良い感じにしてくれるものみたいに思ってたんだけど、ちゃんと出来てないのか。

面倒すぎる。スクリプトとかインポートすると読み込み終わるまでにすっげえ時間かかってつらい。Gradle自体が良く分からないんだよな……。

どうにも競合が問題じゃなくて、メソッドの数が65536を超えているからダメ……なのかな。

1日中やってて解決しなかった。

こういうのが本当につらい。

まったく楽しくない。

全く前進してる感じがしないんだもの。

色々やり続けて23時現在。

AndroidStudioを使ってAPKファイルを作成できた。AndroidStudioからインストールして動いた。

こちらのサイトを参考に.gradleファイルを自分で書くことで解決できるかもしれない。

UnityからAndroidProjectをエクスポート出来ることを初めて知った。そして、意外とすんなり、AndroidStudioでもビルド出来ることも知った。UnityもAndroidのSDKを使ってapkファイルを作成しているので出来るのは当然なんだろうけど、自分でAndroidStudioを使って作成してみると中身を知れた気がして嬉しい。何も理解はしていないが。

ともかく。

mainTemplateを自分で書き換えることでなんとかなるかもしれない。

正解のbuildGradleファイルをAndroidStudio内では手に入れたのでこれをコピペすれば何とかなるかもしれない。

AndroidStudioでエクスポートしたプロジェクトを開いてみるといくつか.gradleファイルが出てきた。

そのうち、launcher.gradleとUnityLibrary.gradleというファイルを編集した。

Unityに戻って見てみると、なんかlauncher.gradleという欄もある。

チェックを入れると、.gradleファイルが生成された。

AndroidStudioで変更した差分をUnity内の.gradleファイルに戻す。

launcherとmaintemplateどちらも変更。

ビルド。

上手に出来ました。

test.apkが成果物。

1日中かかったけど、出来て嬉しい。

報われた気がする。

ていうか、俺は何でこんなことしてたんだっけ。

ああ、ランキング機能を実装するんだった。

FirebaseのSDKを入れたいだけだったんだ。

何も報われてないじゃないかっ。

ずいぶん重いはじめの一歩だった。

でも、きりの良いところまで行けて良かった。

22日目:ランキング実装1

またビルドできなくってた。

いつになったらこの地獄から抜け出せるのか。

今回は早く解決できた。

やっぱりdependenciesの依存関係が重なってたとかそんなんだったと思う。

Androidビルドに失敗する原因は大体この辺な気がしてきた。

AndroidProjectとしてエクスポートしてAndroidStudioでビルドできるようになるまでdependencies怪しいところを修正する。

正直また出てきたら嫌だけど。

AndroidForceResolverとかいうdependencyを解決してくれるUnityのエディタ拡張がGoogleのSDKについてくるけど、完璧ではないみたいだ。

ExportProjectでAndroidのプロジェクトとして出力した後にAndroidStudioで開いてみると赤丸で囲んだところが重なっていたと思う。

どうにもEasyMobile内のxmlファイルで定義してあったところみたいだ。

dependenciesに追加されるっぽいxmlの文字列をコメントアウトして(androidpackage spec=~~~~~の部分)もう一度AndroidResolverを使ってみたら、ビルドできるようになった。

AndroidResolverはxmlで定義してあるものがあると上手く対応できないのかも。

とりあえずapkファイルとして出力できるようになったけど、またエラー出そうな予感が消えない。

ようやくFirestoreのSDKに触れるか。

と思ったらアプリの容量が以上に大きいことに気が付いた。これは元からだったみたいだ。

GooglePlayConsoleからアプリのサイズ内訳をみてみるとネイティブライブラリがでかいみたい。

アセットのテクスチャ容量はもう圧縮したりサイズを小さくしているのでそこまで削れない。

あとで考えよう。

とりあえずSDKに触っていく。

ビルドできるかは不安なままだけど進める。

データの取得とセットは、API使って楽に出来る。

値のセットや読み込みがTaskを返す非同期処理なのでasync awaitを使った。ちょっと使い方忘れてたけど、なんとかなった。

しかし、Firestoreの使い方を覚えるだけで丸2日潰れてしまった。

23日目:ランキング実装2

アプリの公開を停止した。変更する箇所が出てきそうだから、どうせなら予定している実装が終わってからまた公開しよう。それとアプリ容量も大きすぎる。NativeLibraryとかいうものの詳細を調べないと。

DLもされてないし、ちょうど良かった。と、思うことにする。

Firestoreを使ってみてるけどちょっとづつ分かってきたかも。

なんかEditor落ちるときがあるけど、API使ってデータベースにアクセスするときに変な引数渡すと落ちる、気がする。

また1日潰れてしまった。

非同期処理をしていると、メインスレッドじゃないところでエラーが発生すると出力されなかったりして、簡単なミスに気づかなかった。

ともかくデータの読み書きは出来るようになってきた、はず。

明日こそは実装できる。出来てほしい。早く次のことしたい。

24日目:ランキング実装3

[add]新規追加

  • ランキング機能

エラーが出てばかりだけど、ちょっとずつ進んでる。

ざっくり出来てきた。

何回かランキング機能は実装してきたけど、どえらい苦労した。

まさかここまで時間をとられるとは。

スクロールビューなんかはアセット使ったけど、まあ、手間かかった。

非同期だとエラー拾えないのがきつい。メインスレッドでやろうとするとなんか冗長な感じになってしまうような。

ちょっとクラス設計を見直した方が良いかもと思うけどこだわって時間かけすぎるのも嫌だし。

ちょっと休憩はさみたい。

Unity1weekに参加してみようかな。

25日目:UI調整

[update]機能修正

  • UIをシンプルにした

今回のUnity1weekのお題は

「密」

だった。

時流にのった素晴らしいテーマ。

それはさておき、ランキング機能はざっくり終わったので他の調整を進めていく。

スタート画面をちょっと変えてみる。タイトルが上の方にあって見づらいので真ん中に。

それとスタートするときは、一々サーバーに接続しましただののメッセージは出さずに、自動で次の対戦相手を探すまで進めることにした。

あとランキングとかアプリの情報とかはフッターとして下にまとめる。

すっきりした。必要ないUIも出来てしまったけど、仕方ない。

スクロールビューの初期値の調整で手間取った。スクロールを表示したときに、一番下に下がった状態で表示される。

ContentのPivotを調整したら上手くいったけど。

メインプレイシーンも変更する。

遷移がややこしかったので、どのサーバーに接続するとか対戦相手を探すボタンとか一々使わないで、次の戦いに行くボタンだけを設置するようにした。

最初からシンプルにしとけばよかった。

そもそもなぜこんなにややこしくしてしまったのか。

プロジェクトが重くなってきた。繰り返し調整するのがつらい。