TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Unity: MacでVisual StudioからVisual Studio Codeに移行してみた

状況

zenn.dev
ここによるとMacではVisual Studio For Macがサポート終了になるらしいので、順次VSCodeに移行していくことにしました。

環境

Mac 2019 (Intel)

VSCodeにインストールしたもの (最小構成)

Unity Code Snippets

marketplace.visualstudio.com

エラー (.NET Core SDK インストールされていない)

The .NET Core SDK cannot be located: Error running dotnet --info: Error: Command failed:

www.orionn.silver-fruit.com
ここを見ながらVSCode上のエラー出てたダイアログからダウンロードページへ遷移します。
.NET7.0 SDKが出てきましたが、

  • x64
  • Arm64

の2つが出てきました。

自分のMacがどっちのバージョンが必要かはお使いのMacによるので、
x86_64 か arm64 かをコマンド1つで確認する方法
ここによると

uname -m

を実行すれば良いです。
僕のMacIntel製なので

x86_64

と出てきましたので、x64をダウンロードしてインストールしました。

インストールが完了したか確認するために、

dotnet

と打ってみましたが、パスが通ってないようなので、パスを通します。
公式の「ダウンロードありがとうございました」の画面では

mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-7.0.403-osx-x64.pkg -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

のように書いてあったので、公式は$HOMEディレクトリにインストールする想定のようです。
公式の「手動でダウンロードしてインストールする」の項目でもそのようになってました。
macOS に .NET をインストールする - .NET | Microsoft Learn

実際には以下のフォルダにインストールされるようです。

/usr/local/share/dotnet

「?」と思いましたが、以下のパターンのどれかで良さそうです。

  • 公式の手動でインストールする方法にやり直す
  • シンボリックリンク貼る
  • .zshrcなどにパスを追加する

パス追加(.zshrc)
参考は以下です。
Mac + VSCode + .NET 5 SDK + C#拡張 で omnisharp がうまく動かない時のたったひとつのcoolな答え

# dotnet用のパス
export PATH=/usr/local/share/dotnet:$PATH

パスの再読み込み

source ~/.zshrc
dotnet -h

dotnetのヘルプメッセージが出てきてたらOKです。

VSCodeを完全に終了させて、VSCodeを再起動させればOKです。

# VSCodeのAccounts
VSCodeの左下のところにAccountsがあり、そこにMicrosoftのログインが求められましたので、とりあえず、ログインしときました。

使用感はどんなものか?

元々Visual Studio for Macには不満点(git周りなど)もいくつかあって、VSCodeに移行できなるなら移行したいと思っていたのですが、この機会に移行してみました。

Visual Studio for Macよりもすごく良いです。参照も補完もOnTriigerEnter2Dとかのスニペットもちゃんと出てくれるし、不満点は特にないです。
差分やgitもVSCodeなので、申し分ないです。
移行してよかったです。

C#スタイル、自動整形など細かい点は後々設定してくことにします。
デバッガーとかはまだ試してないです。

Unity: 「currentFileSystemTime.ticks != 0 using check file Temp/FSTimeGet-1938f0a485be842559ab99e8c24e87d2 => /Temp/FSTimeGet-1938f0a485be842559ab99e8c24e87d2 (file exists no, folder exists no)」

状況

Unityを2020.3からあげると以下のようなエラーが定期的に出てくるようになりました。

currentFileSystemTime.ticks != 0 using check file Temp/FSTimeGet-1938f0a485be842559ab99e8c24e87d2 => /Temp/FSTimeGet-1938f0a485be842559ab99e8c24e87d2 (file exists no, folder exists no)

エラーが出ているのですが、ビルドもできるし、再生ボタンも押せるし、問題なく動作するので害はなさそうです。

原因

Unityをアップデートしたときに、TempやLibraryフォルダを削除したので、その影響かもしれません。

解決策

How Do I Know If My Unity Project is Corrupted? - Questions & Answers - Unity Discussions
この記事にある通り、以下を実行しました。

  • Libraryフォルダを削除
  • Unity再起動

これで解決しました!

Unity: FirebaseでGradleでのビルドが通るまで

状況

Unity2020.3 -> Unity2021.3.31にアップデートしたときにFirebase関連のGradleでのビルドがうまく通らなくなりました。

環境

  • Unity2020.3.0
  • Unity2021.3.31
  • Firebase 11.3
  • Gradle

エラー1

WARNING: The option 'android.enableR8' is deprecated and should not be used anymore.
It will be removed in a future version of the Android Gradle plugin, and will no longer allow you to disable R8.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.1.1/userguide/command_line_interface.html#sec:command_line_warnings
69 actionable tasks: 66 executed, 3 up-to-date

forum.unity.com

android.enableR8が非推奨となっていていますというエラーが出ていたので、gradleTemplate.propertiesから

android.enableR8=**MINIFY_WITH_R_EIGHT**

これをコメントアウトしておきます。

R8については以下の記事が参考になりました。
qiita.com

エラーその2

???がいっぱい出たエラー

????????????????????????????????????????????(1.8.0-adoptopenjdk)???Bug Database (http://bugs.java.com)?????????????????????????????????????????????Java bug????????????????????????(http://bugreport.java.com)???Java???????????????????????????bug??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl)
/Applications/Unity/Hub/Editor/2021.3.31f1/PlaybackEngines/AndroidPlayer/OpenJDK/bin/java -classpath "/Applications/Unity/Hub/Editor/2021.3.31f1/PlaybackEngines/AndroidPlayer/Tools/gradle/lib/gradle-launcher-6.1.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleRelease"
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.

エラー祭りとなりました。

とりあえずGradleのバージョン関係というところにあたりをつけた以下の記事を参考にしてみました。

UnityのAndroidビルドでAPIレベル31にしたらGradle地獄だった話 #Android - Qiita
【Unity】Admob導入後Androidビルドエラーが発生した際の対処法 - ゲーム作るためのこと学ぶdevろぐ(’ー’)/チャラン

どうも上の記事によるとbaseProjectTemplate.gradleの

            classpath 'com.android.tools.build:gradle:3.6.0'

をUnityの2021.3からは4系に書き直す必要があるようです。

UnityのGradleとGradleプラグインの関係は以下の記事にありました。
Gradleプラグインの方のバージョンはclasspathに指定する方です。

Unity公式
Unity - Manual: Gradle for Android

Unity version Gradle version Android Gradle Plug-in version
2021.3 6.1.1 4.0.1

Android公式
Android Gradle プラグインのリリースノート  |  Android デベロッパー  |  Android Developers

大丈夫そうなので書き直していきます。
色々書き直すのが面倒なので、

  • baseProjectTemplate.gradle
  • launcherTemplate.gradle
  • mainTemplate.gradel

を一旦削除して、ProjectSettings > Player > Publishing Settingsでもう一度カスタムGradle系のチェックを入れ直します。そうすると再度2021用の書き方に再生成してくれます。
その後 AndroidResolver > Force Resolveします。

これでbaseProjectTemplate.gradleが

            classpath 'com.android.tools.build:gradle:4.0.1'

ちゃんと4系になってくれてました。
あとは古いのと差分を見て、必要だったらつけたしすればオッケーです。

これでビルドが通り、無事Androidで動きました。

感想

本当は2022.3にしたかったのですが、そちらはgradleの書き方も大きく変わっていて、同じやり方をしてもビルドは通るのですが、起動するとエラーが発生してしまって、一旦断念しました。
Googleの最新API対応の期日がもうないので、2021に対応して、Firebaseも新しくしたので、一旦これでOKとしておきます。

Unity: Firebaseでエラーが出た「Unable to find command line tool python required for Firebase Android resource generation. python is required to generate the Firebase Android resource file google-services.xml from Assets/FirebaseConfig/GoogleService-Info.plist. Wi

状況

Unable to find command line tool python required for Firebase Android resource generation.
python is required to generate the Firebase Android resource file google-services.xml from Assets/FirebaseConfig/GoogleService-Info.plist. Without Firebase Android resources, your app will fail to initialize.
python was distributed with each Firebase Unity SDK plugin, was it deleted?

のようなエラーが出てしまい、
/Assets/Plugins/Android/FirebaseApp.androidlib/res/values/google-services.xml
が生成できなくなってしまいました。

環境

  • Firebase 7.2.0
  • Mac Ventura 13.4.1
  • Unity 2020.3.0f
  • Unity 2021.31f

原因

[Unity]Unable to find command line tool python required for Firebase Android resource generation.

この記事によるとMacのOSを上げてしまったことでMacpythonが削除されて、python3がデフォルトになったため、Firebase側からpythonというコマンドを実行できなくなってしまうことが原因のようでした。

失敗策

上の記事ではFirebaseのライブラリを修正したものを上書きすると書いてあったのですが、package managerからインストールする形式にしているので、上書きというのはできなさそうです。(残念ながら断念)

なので、pythonをインストールしてみます。

元々pyenvでpythonの環境はあったのですが、動かなくなっていたので以下の記事を参考にしました。
zenn.dev
~/.zshrc に以下を追加してあげれば動くようになりました。

eval "$(pyenv init --path)"

~/.zshrcを反映

source ~/.zshrc

Unityに戻って動くか試してみると、generate_xml_from_google_services_json.pyは動いてないようです。
失敗ですw

解決策

kingmo.jp
Firebaseをアップデートしてみます。
どうやら9.0.0以上ならOKなようです。
11.3.0へアップデートしました。

Android buildすると以下のメッセージが出ました

java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl)

qiita.com
この記事を参考にするとgradleのバージョンが古いので、Unityのバージョンをあげると、gradleのバージョンも上がるとのことだったので、Unity 2022.3.11にあげたらいけましたが、他のエラーがまた出てきたので、長くなりそうなので、また別記事にします。

Unity: 2022.3.11fにアップデートしたら「'AndroidSdkVersions.AndroidApiLevel21' is obsolete: 'Minimum supported Android API level is 22」というエラーが出た。

状況

Unity: 2022.3.11fにアップデートすると以下のようなエラーが出て実行できなくなりました。

Library/PackageCache/com.google.android.appbundle@1.4.0/Editor/Scripts/Internal/AssetPacks/AssetDeliveryWindow.cs(139,56): error CS0619: 'AndroidSdkVersions.AndroidApiLevel21' is obsolete: 'Minimum supported Android API level is 22 (Android 5.1 Lollipop). Please use AndroidApiLevel22 or higher'

Library/PackageCache/com.google.android.appbundle@1.4.0/Editor/Scripts/Internal/BuildTools/BundletoolHelper.cs(133,46): error CS0619: 'AndroidSdkVersions.AndroidApiLevel21' is obsolete: 'Minimum supported Android API level is 22 (Android 5.1 Lollipop). Please use AndroidApiLevel22 or higher'

Failed to find entry-points:
Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Assembly-CSharp-Editor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' ---> System.Exception: Failed to resolve assembly 'Assembly-CSharp-Editor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' in directories:


Library/PackageCache関係のエラーと出ているのでPackageCacheを削除すれば解決するかと思いましたが、うまくいきませんでした。

環境

  • Unity 2020.3.0
  • Unity 2022.3.11
  • パッケージはPackage Managerからインストール

原因

com.google.play.review-1.4.0をUnity 2020.3で使っていたのですが、Unityを2022.3.11にあげると依存関係でエラーが出るようでした

Unity 2020.3にやっぱり一旦戻したい時

1. 動作前のUnityのversionに一旦戻す。
2. Library/PackageCacheとTempフォルダを削除してReimport Allを削除した。

解決策

com.google.play.reviewのパッケージにはcom.google.android.appbundleという依存パッケージたちがあるので、それらを最新にしてあげればOKです。
https://developers.google.com/unity/archive?hl=ja#play_in-app_review
このページに行ってアプリ内レビューの最新のパッケージをとってきて、依存関係のパッケージもとってきて、Package ManagerのPackages/manifest.jsonに記述すればOKです。記述順は大切なので、リンクの依存関係の順番に並べれば多分OK!

Unity: Admob: AndroidResolverDependencies.xmlのbundleIdが大文字に勝手に書き換わる

環境

  • Unity 2022.3.11
  • Admob v8.5.2

状況

  • 新しいUnityにバージョンアップして、Admobも新しくするとAndroid ResolveされるときにProjectSettings/AndroidResolverDependencies.xmlにあるbundleIdがなぜか勝手に書きかわっていました。

解決策

UnityのProjectSettings > PlayerのIdentificationのOverride Default Bundle identifierにチェックを入れるとpackage名を書き換えれるようになるので、正しい名前に書き換えれます。

ProjectSettings/ProjectSettings.assetのoverrideDefaultApplicationIdentifierが1になってapplicationIdentifierが正しいものになっていることが確認できたらOKです。

原因

ふわっとしか調べていないので、わからないのですが、Unityを新しくしたタイミングでは問題なかったのですが、しばらくするとProjectSettingをいじったわけでもないのに、どこかのタイミングでなんかpackage名が急に書きかわりました。gitのログで追えるのですが、追って見てもいまいちパッとしなかったので、調査終了しました。

Unity: Admobを新しいバージョンにするときの備忘録(個人用)

気をつけること

古いAdmobは一旦全部削除する。

ただし、以下は残しておく

  • GoogleMobileAds > ResourcesのGoogle Mobile Ads Settings
  • Plugins > Android の proguard-user.txt
Androidの最新のAPI Levelに対応する時は以下の記事を参考にする。

【Unity】Androidアプリで「APIレベルを上げてください」と怒られた時の対処法 | くものす
やることはプロジェクト内のandroid SDKフォルダに最新のAPI関連の何やかんやらをコピーして入れておく必要がある。

Androidの最新のAPI Levelに対応したのに、Google Play Consoleから警告のメッセージが消えない時

しばらく待つと消える。(1日弱くらいのラグあり)

ついでにgitignoreも更新しておく

Admobを更新するときはUnity自体も更新することになるので、gitignoreの差分を以下のサイトと見比べて追加しておく。
github.com

その後に、誤ってすでにファイルを追加してしまっていたら、以下のコマンでgit管理対象外にする

git rm -r --cached .

備忘録

ハマった内容は随時追記していくこと。(未来の自分)