😭

ARCore/ARKitをビルドしたら、真っ暗だしクラッシュする(泣)

2020/09/27に公開

Zenn初投稿です。

AR FoundationでARアプリを作ろうとしたら、起動したあと画面が真っ暗だし、クラッシュするし、最悪だ!😭
どうすればいいんだよ😭

という方向けです。

⚠️留意事項

あなたのデバイスが、ARCore/ARKitによってサポートされていない可能性があります。詳しくは、こちらを見てください。
https://developers.google.com/ar/discover/supported-devices

この記事は、基本的にAndroid向けですが、一応iOS版のトラブルシュートをしたい方でもわかるように書いてはいます。ですが、iOSの問題が修正されるかは保証できません。

環境

  • Unity 2019.4.11f1(2019.4.9f1動作確認済。2019.4以上であれば動くっぽい?)
  • Android Logcat 1.2.0
  • AR Foundation 4.0.8
  • ARCore XR Plugin 4.0.8
  • ARKit XR Plugin 4.0.8
  • Universal RP 7.3.1

原因

残念ながら詳しくは調べていないのでわかりませんが、対応デバイスではない・使うバージョンが間違っていて、Session was passed nullが出る等があるようです。

解決方法

必要なパッケージをインストールする

  1. (必要であれば)新規プロジェクトを作成します
  2. Window > Package Managerを開きます
  3. Android LogcatAR FoundationARCore XR Plugin(Androidであれば)ARKit XR Plugin(iOSであれば)Universal RPをインストールします。その際、下記の画像のとおりに左の三角を押して展開し、最新のバージョンを選択してください[1]verifiedは無視して構いません。
    Package Managerの画面

初期設定を行う

  1. Edit > Project Settingsを開きます

  2. Playerを押して、Other Settingsを開きます

  3. Graphics APIsからVulkanを削除します
    Graphics APIsからVulkanを削除

  4. Minimum API LevelをAndroid 7.0 (27)に変更します(ここはお好きなものに設定してください。)
    Minimum API Levelを変更

  5. Scripting BackendをIL2CPP、Target ArchitecturesのARM64に設定します。
    Scripting BackendとTarget Architecturesを設定

  6. 左のタブからXR Plug-in Managementを開き、Android/iOSのマークを押してPlug-in ProvidersのARCore/ARKitをチェックしておきます。
    ARCore/ARKitにチェックを入れる

オブジェクトを配置する

次のように、AR SessionAR Session Originを配置してください。AR Session Originの中には、AR Cameraが自動的に生成されています。
オブジェクトを配置

Universal RPを配置する

準備

  1. 下にあるProjectタブ(個人差あり)のAssetsフォルダに、Renderingフォルダを追加します。

  2. Renderingフォルダの中で、右クリック > Create > Rendering > Universal Render Pipeline > Pipeline Asset (Forward Renderer)を押して、名前を変えずにEnterを押します。
    Universal RPの作成

  3. UniversalRenderPipelineAsset_Rendererを押して、Add Renderer FeatureからAR Background Renderer Featureを選択します。
    Renderer Featureの追加

  4. Edit > Render Pipeline > Universal Render Pipeline > Upgrade Project Materials to UniversalRP Materialsを押して、出てきたプロンプトに従いProceedを押し、Assetを変換します。

設定

  1. Edit > Project Settingsの、Graphicsの一番上にあるScriptable Render Pipeline Settingsのフィールドにある一番右のボタンを押し、出てきたウィンドウにあるUniversalRenderPipeelineAsset (UniversalRenderPipeelineAsset)を押します。

いざビルド

  1. 上記のすべての項目が終わったら、File > Build SettingsにあるPlatform内のAndroidを押し、Switch Platformを押して少し待ちます。
  2. Switch Platformが終わったら、スマートフォンにUSBをつなぎ、Build And Runを押しましょう。
  3. ビルドが終わり次第、スマートフォンの画面がついていれば自動的にアプリが実行されますので、電源はつけたままにしておいてください。

テスト & トラブルシュート

アプリのビルドが終わり、実行されたにもかかわらず、黒い画面がでる・クラッシュするなどの問題が出るときは、まず最初に入れたAndroid Logcatのウィンドウが表示されているので、そちらを見てください。赤い文字で表示されているところに、

  • Session was passed null
    が表示されている場合は、なんらかの手順を間違っているか、もしくはバージョンなどの互換性があっていない場合があります。バージョンを合わせてみるか、他のバージョンを試して試行錯誤してみてください。
    ログの特徴としては、同じログが何度も何度も流れます。
xxxx/xx/xx Error xxxxxxxxxxxxx: Session was passed null
xxxx/xx/xx Error xxxxxxxxxxxxxxxx: Session was passed null
xxxx/xx/xx Info xxxxxxx anything happened
xxxx/xx/xx Error xxxxxxxxxxxxx: Session was passed null
xxxx/xx/xx Error xxxxxxxxxxxxxxxx: Session was passed null
xxxx/xx/xx Info xxxxxxx anything happened

のような感じです。

  • Unable to obtain device profile from the content provider: NOT_FOUND: Device is not supported.
    が表示されている場合は、残念ながらお使いのデバイスが対応していません。他のデバイスを探してみてください。
    ログの特徴としては、同じようなログが2回ほど流れますが、1つの範囲が大きいメッセージが表示されます。
============================================================================
xxxx/xx/xx Error native session_create_implementation_shared.cc:1799 Unable to obtain device profile from the content provider: NOT_FOUND: Device is not supported.
xxxx/xx/xx Error native session_create_implementation_shared.cc:2121 Failed to create calibration config and device profile.

Stacktrace:
    xxxxxxxxxxxxxxxxxxxxxxxxxx (xxxxxxxxxx)
    xxxxxxxxxxxxxxxxxxxx (xxxxxxxx)
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (xxxxxxx)
============================================================================

xxxx/xx/xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

============================================================================
xxxx/xx/xx Error native session_create_implementation_shared.cc:1799 Unable to obtain device profile from the content provider: NOT_FOUND: Device is not supported.
xxxx/xx/xx Error native session_create_implementation_shared.cc:2121 Failed to create calibration config and device profile.

Stacktrace:
    xxxxxxxxxxxxxxxxxxxxxxxxxx (xxxxxxxxxx)
    xxxxxxxxxxxxxxxxxxxx (xxxxxxxx)
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (xxxxxxx)
============================================================================

のような感じです。

参考

How To Fix Black Screen Issue When Using AR Foundation And Universal Rendering Pipeline in Unity?
https://youtu.be/QcYlLI4KZOs

締め

Unity等に関しては本当に入門したばかりなため、なにか間違いがあればご指摘ください。
ご質問に関してなんでも受け付けているので、コメント欄やTwitter経由で、気軽にご相談ください!ただし明確な答えを出せるかは状況次第です!

脚注
  1. ここでは4.0.8になっていますが、バージョンアップで変わる可能性があります。 ↩︎

Discussion