Unity2019.4LTSもバージョンが上がって安定してきたのと、案件の都合上MRTK2.4をちゃんと使っていなかったので、この組み合わせで動かしてみました。案の定躓いた部分があったのでメモしておきます。
Unity2019から、Scripting Backendが.NETでのビルドはできなくなりました。IL2CPP固定になります。
IL2CPPでプロジェクトを書き出して実機で動かしてみると、アプリ起動直後に実行時エラーが発生。
「UnityPlayer_UAP_arm_master_il2cpp.pdb は読み込まれていません」
意味が分かりにくいエラーですが、これはビルドターゲットを「ARM64」に指定すれば回避できます。UnityのBuild Settingsを変更する必要はなく、Visual Studio上で変更すれば問題ありません。
Player Settings > Player > Graphics JobsをoffにするとARMでもビルドできると記載がありました。
使っている外部プラグインがARM64に対応していないなどでARMビルドが必要な場合はこの方法で可能ですね。
Unity2019.4と、Visual Studio 2019 Ver.16.7以降(?)を使っている場合、ARM64ビルドだとHand Menuが実機で表示されないようです。
この場合、HandConstraintPalmUpやDirectionalIndicatorの「Smoothing」をoffにすればARM64でも表示されるそうなのですが、その名の通りスムーズさが失われてしまうので、上記設定でARMビルドにした方がいい場合もあります。ARMとARM64では使用できるメモリ量に違いがあるのでARM64が推奨されているのですが、現時点ではHand Menuのスムーズさを優先するとARMビルドという選択肢になりますね。
Near Menuなど、Radial Viewの挙動がおかしい場合があります。下記の動画はARM64でビルドしたNear Menu Examplesなのですが、ピン止めをはずすとメニューがどこかに消えてしまいます。
これも下記Issueで議論されていました。
結論としては、ARM64ビルドをやめてARMにするか、Visual Studioでのコンパイルオプションに「–compiler-flags=”-d2ssa-cfg-jt-“」を追加するか、のようです。
ARMビルドを行うには、前述のようにGraphics Jobsをoffにします。
ARM64で動かす場合のコンパイルオプションのつけ方です
ビルドして書き出したソリューションの中の、IL2CPPプロジェクトのプロパティを開きます。その中のNMakeの項目のテキストがコンパイルオプションになります。
この文字列に、「–compiler-flags=”-d2ssa-cfg-jt-“」を追加します。~il2cpp.exe”の後につけるのがわかりやすいでしょう。前後に半角スペースを入れて独立したコマンドラインオプションとなるようにしてください。
ARM64で動作したのですが、今度はアプリがウインドウ表示になってしまい、イマーシブになりません。間違ってXAMLで書き出しちゃったかな?と思ってもちゃんとD3Dで書き出されています。
これは、XR SettingsのVitrual Reality SDKsにWindows Mixed Realityが設定されていないことが原因でした。
MRTK2.4のパッケージをインストール後に、設定のウィザードが出て「Enable Legacy XR」が含まれているので何もしなくていいのかと思ったのですが自動では設定されないようです。(どうやらXR Pluginとの絡みらしいです)
以上、備忘録でした。
Unityから書き出したVisual Studioのプロジェクトを実行したら、下記のエラーが発生しました。
2>LINK : fatal error LNK1181: 入力ファイル ‘C:\Users\hiroki.tanaka\source\repos\○○(日本語のディレクトリ)\Unity_Learn02\App\build\bin\ARM\Release\GameAssembly.lib’ を開けません。
これは、日本語のディレクトリを含むパスに書き出したのが原因だったようです。書き出し場所を変更したら改善しました。