UnityでARアプリ開発中に遭遇したバッドノウハウです。
起きたこと
ARKitとARCoreは機能がほぼ同じなので、iOS版とAndroid版を同じUnityプロジェクトで管理し、一部メソッドを切り替える実装にしています。
この度、iOS版の開発を終えて、プラットフォームをAndroidに戻したら、すごいことになってました。
待ち時間中にAndroid版の進捗をご覧ください。
— jyuko (@jyuko49) 2018年4月18日
iOS版の開発中に何があったらこうなるんだ? pic.twitter.com/sNZ1vw6Piv
TangoのSDKアップデート時に似たような事があったので、Cameraの"Clear Flags"を確認するもARCoreの場合は最初から"Solid Color"になっていて問題なし。
スクリプトの不具合かと思い、バグの発生箇所を探したものの特定できず。
マジで心当たりがない!(・∀・)
やったこと
- 新規にプロジェクトを作成してARCoreを動かしてみる。
→動いた。 - 動いたプロジェクトと動かないプロジェクトのProject Setting、Cameraのプロパティを全部見比べる。
→直った!
地道なデバッグって大事ですよね。
原因
"Auto Graphics API"のチェックが外れていた。
意図的に変更した記憶はないので、なにかの拍子にクリックしちゃったとかだと思います。
"Player Settings..." > "Setting for Android" > "Other Settings" > "Auto Graphics API"にチェックを入れたら直りました。
Android版無事直った。1つ賢くなった。 pic.twitter.com/jTsdJ9Ugq0
— jyuko (@jyuko49) 2018年4月19日
失敗から学ぶ
Unityのサイトで"Auto Graphics API"の説明を見ると、OpenGLの使用バージョン(優先度)を設定するプロパティらしい。
ONにすると新しいバージョンを優先してデバイスが利用可能なバージョンを選択する。OFFにするとすぐ下に表示されるリストの優先順に従う。
不具合時はリストにOpenGL ES2が記述されていて、OpenGL ES3が使える設定になっていなかったため、正しく描画ができなかったものと思われる。
OpenGLのバージョン間差異は日本語のWikipediaにざっくり書いてあります。
・・・ということで、Android版のビルドも通ったのでGoogle Playへの申請準備も進めていきます。ARCoreの対応機種がまだ少ないので優先度は低めですが、今の機能ならついでに対応できるレベルなので。
↓iOS版 v1.0はApp Storeにて公開中です。
[https://itunes.apple.com/jp/app/クエリちゃんにみかんをあたえるar/id1370937019?mt=8 :embed:cite]