Unity+ARKitでハマりました

やあ子供たち。
iPad(第5世代とか6世代とか iOS 13.7など)向けに、
Unity 2020.1.8f1 + ARFoundation 3.15 + ARKit 3.17
を使ってARマーカーに反応してモデルを出すような簡単なアプリを作ろうとしていてとてもハマったことがあってのでメモしておくよ。

「ARKit マーカー」などで検索するだけでたくさん出てくる記事を参考にしながら、ARKitで初めてのアプリを作ろうみたいな手順をやっていくのだが、Unityでエラーなしでビルドして、XCodeでもエラーなしでビルドできて、デバイスにプログラム流し込んで、アプリ実行して、
どきどきしながらカメラをマーカーにかざしてみても何も起きない、ということがありましたよと。

何せ誰もがあちこちで紹介してくれているARFoundation+ARKitを組み合わせて使うその単純な手順が、うまく動かないのだから、もうそれだけで体調が悪くなりそうな事態だ。

バイスであるところのiPadの画面にもエラーも何も出ないので途方にくれて何度もビルド手順をただただ見直した。何度も手順を見直したさ。
、、しかし、原因は手順云々ではなかったのです!
何とありがたいことに、Macとデバイスをつなげた状態でXCodeからアプリを起動すると、XCodeのコンソールでデバイスの状況がわかる、クロスデバッギングのような状態になっているようなのですが、このアプリ実行中のコンソールへの出力内容をよく見てみると下図のようなエラーが出ていました。

f:id:nurs:20201026233026p:plain:w300

エラー文が出れば後はそれをコピペしてググるだけなのでもうこっちのものです。検索結果やいかに。はい、情報あまりない中で、同じような状況のいい質問出してる人がいるのに誰も解決策を出せず迷宮入りしてしまっているこちらのQ&Aみたいなページもありながら、こちらのページの最後の方で人々がWindowsのパスの長さに触れ始めたところ(2019年の8月1日とか同年12月11日とかの書き込み)が目に止まりました。

結論から言うと、WIndowsのファイルパスの文字数制限にやられましたという話だったっぽい。今まではUnityのprojectをデスクトップの中のさらにフォルダ階層3つくらい掘ったところに置いてビルドしていたわけですが、上記のページに書き込みがあるように、Unityのprojectをドライブレター直下の場所に置いてビルドして、それをMacに持っていって、ビルドしてデバイスにプログラム流し込んで、、それだけでした。それだけで、ARマーカー上に指定した3Dモデルが表示されるようになりました。

まこれ、UnityやARKitに限らず、一般的な常識みたいなところに落ち着くのかも知れませんが。あとファイルパスの文字数制限外す裏ワザもあちこちで紹介されてるしね。まそれは今回試してないけど。。(でもその裏ワザ、もうやっちゃうべきなのかも。もう二度とこれで悩まなくてもよくなるように。)

やー、手順の見直しよりもデバッグですよなー何が起きてるのかを教えてくれるわけだから

手順しかすがるものがない状況って、ほんと無力なのでそこで絶望して諦めちゃだめだ!手順がうまくいかない場合は何が問題なのかを探るアプローチも絶対に試すべき!と改めて思った一件でした。
チャオ!