カテゴリー: IDE・ツール・ライブラリ関連

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

Androidアプリの64ビット化強制のメールからごっぐるから届いて、その辺の絡みでseekhackしたというお話。64ビット化強制のメール自体は5月かそこらで既に届いていたのをよく見てなかったw


Unity 64bit

多分、ぐぐればQiita辺りのエントリがすぐにヒットするはず……だが何故か俺氏のテンポラリブックマークにはstackoverflowとかのurlしか残ってなかった……(´・ω・`)エイゴヨメナイノニ

何はともあれ、最終的に

  1. メニューバーから[ビルド設定]->[プレイヤー設定]の順に開く。
  2. [その他の設定]-[設定]の「スクリプティングバックエンド」を”IL2CPP”にする。
  3. 「ターゲットアーキテクチャ」で”ARM64″にチェックを入れる。
  4. “android-ndk-r16b-windows-x86_64.zip”をダウンロードして解凍する。
  5. メニューから[編集]-[環境設定]の順に選択する。
  6. [外部ツール]のNDKに先に解凍したフォルダを指定する。

みたいな感じで行けたんだったかな?
ちなみにUnityのバージョンは”2018 4.4f1″。
2019でも問題ないんだろうけれども、色々と試行錯誤した結果、最新版はやめておこうという気になった(ノ∀`)

参考:
Unity Export Android 64-bit
Googleplay 64bit console warning


Unity+sqlite+64bit

上記の方法でようやく64bitでコンパイル出来るようになったのだが、実機上でゲームをしようとすると上手く動かない。正確に言うとカードがディールされない(´・ω・`)

色々と悩んだ結果、そう言えば、前にdb絡みで同じような現象になったなということを思い出し、SQLiteUnityKitでぐぐる。

どんぴしゃりなエントリが(・∀・)
UnityでSQLiteをAndroid(64bit対応)向けに導入する

  1. 拾って来たsqlite-android-3290000.aarを”Assets/Plugins”の下に入れた。(“Assets”以下なら何処でもいいのかな?)
  2. SqliteDatabase.csのDllImportの部分を全部変更した。14箇所だったかな?
    [DllImport("sqlite3", EntryPoint = "sqlite3_step")]
    //        ↓
    [DllImport("libsqliteX", EntryPoint = "sqlite3_step")]
    

ちなみにこの方法で実機上でゲームがまともに動くようになったが、editor上では当然の如く、エラーになった(ノ∀`)

“sqlite3.dll”と”sqlite3.def”をそれぞれ”libsqliteX.dll”と”libsqliteX.def”にしたら、動いた(・∀・)

これが正しい解決策かはわからないがw


取り敢えず、これで一応64ビット化は出来ているようなんだけれども、まあしばらくはアップロードしなくてもいいか。どうせ誰もダウンロードしないし( ゜σ・゚)ホジホジ

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

今も解決していない…(ヽ’ω`)
しばらくFirebaseはほうっておくべきか…


Firebaseを使おうと思ったが

Firebase Consoleでアプリ作成等までは出来たので、ページのガイドに習ってFirebaseAnalyticsプラグインを入れてみると以下のエラー(´・ω・`)

Failed to rename asset Assets/Plugins/x86_64/Firebase/libFirebaseCppAnalytics.so to Assets\Plugins\x86_64\Firebase\libFirebaseCppAnalytics.so (The source asset could not be found)

Failed to rename asset Assets/Plugins/x86_64/Firebase/libFirebaseCppApp-5.4.0.so to Assets\Plugins\x86_64\Firebase\libFirebaseCppApp-5.4.0.so (The source asset could not be found)

下の方は4日前にissueに上げられているみたいだけれども、とすると、上の方はまた別件なのか?
Version Handler Linux library renaming fails in some cases

そもそもx86_64なんてフォルダ作られてないな…
なんだろう、これは。


最初はAdmobとぶつかってるのかなと思って、Admobを最新版にしてみたが、エラーは取れず。

Resolverとかいうのを使用してみたが解決せず。
仕方がないのでimportしたFirebaseアセットをアンインストールしようと思ったが、

Unityって標準機能でアセットのアンインストールをサポートしてないのかよ…( ;・´ω・`)ゴクリッ

というわけで、ぐぐって、【Unity】AssetStoreからインポートしたアセットをプロジェクトからアンインストールする「 Package Uninstaller」で紹介されていたアセットを入れて、FirebaseAnalyticsをアンインストール。

更にfirebaseの名がついたファイルが残っていたので、手動で削除した。
で、まあ、「Firebaseは取り敢えず放っておくか(´・ω・`)」と思ったら、今度はadmobがおかしくなる…_| ̄|○

なんか古いのと新しいのでなんかぶつかっていたみたい。
それもなんとか試行錯誤してadmobが表示されるようになったが、今度はゲームがEditor上でしか動かないという状態に…__○_

色々試したが結局、前のコミットに戻すしかなくなった…(ヽ’ω`)ナントイウテイスキル


で、まあ、その後クイックスタートサンプルを落として来て同じようにやったら、上記の2つのエラーが出ている状態であると…(´・ω・`)

そう言えば、それ以外にも

The type or namespace name `Tasks’ does not exist in the namespace `System.Threading’. Are you missing an assembly reference?

とかいうエラーも出てた。

これはPlayerSettingsのConfigurationで.NETのバージョンが4系にしてないから文句を言われていたみたい。或いは3系のアセットを読み込めばいいのかな。


なんだか色々と気力が低下状態でエラーとかにハマると原因究明すら厳しい…(ヽ’ω`)

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

結局、力尽きた…_| ̄|○

TowerDefenceTutorialのTowerフォルダ以下のコードまでは目を通したが、力尽きたというか、

飽きた(・∀・)
ということで挫折(ノ∀`)

読み進める為に参考にしたエントリは以下の通り。理解したと思ってもすぐ忘れてしまうので、またいつか読む時の為に。

参考:
デリゲートとは【C#】
【Unity】UnityEventの用法と用量
数学系の処理を扱うMathfの全変数と全関数【Unity】
[Unity][Unity3d] Unity の C# で限りなく小さい float 値を使いたい時には float.Epsilon を使ってはダメ
Time.fixedDeltaTimeとTime.deltaTimeについて
【Unity】ISerializationCallbackReceiverを使ってみたんだ
数学系の処理を扱うMathfの全変数と全関数【Unity】
インデクサー
Java プログラマのための C# 入門 (#4 クラス定義の応用的なことと演算子のオーバーロード)


何故かMole’s Match-upはリファクタリングを開始している。
中学生漢字データを作成しないといけないのに(ノ∀`)

何はともあれ、遊んでないで早く仕事を探さないといけない…(ヽ’ω`)

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

スポーンとやる気が飛んだ模様(´・ω・`)

そろそろ遊んでいられなくなったり、Google+閉鎖で次何処に行こうかと色々探しながら、チュートリアル消化を続けていたが、二つ続けてギブアップしてしまい、なんだかやる気が消失。

挫折したチュートリアル一件目はアドベンチャーゲーム。これもワークショップだかトレーニングデイの映像を流用したもの。

既に何件か、この手の形式のチュートリアルを観てきて、かなり飽きてきていたのに加えて、あんまり興味のない3D移動のアドベンチャーということもあり、途中で止めてしまった(ノ∀`)

navMeshやらScriptableObjectを使用しているようなので、それはそれで理解したら為になるとは思うものの、これは日本語で解説してくれているサイト等で勉強してもいいかなぁと思ってしまった。


挫折したチュートリアル二件目はタワーディフェンステンプレート

これは動画なしのテキストオンリーだったが日本語訳がされていたので、一瞬、「お(・∀・)」と思ったが、かなり内容を端折ったチュートリアルだった…(ヽ’ω`)

正直、訳がわからない(´・ω・`)
これは完成プレハブをいちいち開いてみて、その値やアタッチされているコンポーネントを真似しないと駄目?
中級向けとはいえ、これはチュートリアルなんだろうか。

せめて、もっと外殻や構造の説明があれば、それがとっかかりになるが、この状態では全く内容の想像がつかない。完成プレハブやコードを一から見ていかないといけないのであれば、これはチュートリアルとは言うべきではないか、上級にすべきではないかなぁ。上級というのもおかしいかな。サンプルという方が正しいのかもしれない。

今までのチュートリアルもレディメイドのものを持って来てどうこうするという形だったので、個人開発者向けというよりかは、グラフィッカー等々の別の人間が作ったものを組み立てていくような企業所属の分業プログラマ向けの内容ではあったが、それでもまだ動画の流れに従っていればゲームは完成するので、チュートリアルであったと言える。

このチュートリアルはその動画がなく、テキストでは細い説明はしていない……もしかしたら、どっかにあんのかな(´・ω・`)

というわけで取り敢えず挫折した…(ヽ’ω`)


しばらくはチュートリアルは触らない方向で…

という結論に達したものの、なんやかんやでスクリプトを読み始めた(´・ω・`)

まだTower絡みを幾つか読んだだけなので勘違いしているのかもしれないが、

  • 「Tower コンポーネントを理解する」で”Tower Description”が表示されるように書いてあるが、”Tower Description”はTowerLevelDataのパブリック変数なのでTowerコンポーネントでは表示されない?
  • 「エージェントの作成」でAlignmentフィールドに”Ememy (SimpleAlignment) スクリプタブルオブジェクトをドラッグ”するように書いてあるけれど、これってDamagerを先にアタッチしてないと駄目な気がするんだけれども、その前の手順を行った場合に自動的にアタッチされるんだろうか?
  • “Towers”等のコメントのIntiailisesでiが抜けてる。
  • “TowerLevel”のコメントでITowerRadiusProviderがITowerRadiusVisualizersになっている?

と言ったところが気になり申した(´・ω・`)

あとこれは全然関係ないが、書いている人がイギリス英語の人らしく、initialiseとかを見ると「ん(´・ω・`)?」となってしまう(ノ∀`) メソッド名はInitializeだったりするからw
英文に慣れている人ならば、イギリス英語とアメリカ英語の違いを気にせずに居られるんだろうなぁ。

最後まで読み切るかどうかは判らないが、取り敢えず読んでみるか。


中学生漢字の入力がまだ300ちょいまでしか行っていない(ヽ’ω`)
あの作業はかなり苦痛なので、Mole’s Match-upのアップデートはまだまだ先だな……