【メモ】Unity 2019.4 で XR Plug-in Manager から Oculus を選んだら import 無限ループにハマったけど無事脱出できた話。


TL;DRはこちら:LINK TO THE SECTION

環境情報

  • Windows 10 Home
  • Unity 2019.4.0f1, 2019.4.1f1
  • Oculus Rift

流れ

Unity 2019.4 (LTS) が来たので、早速インストールした。

ついでなので、「ゼロからはじめるHDRP 第2回 デジタルヒューマンをプレイヤーキャラにする(6月16日号) - Unityステーション」も試してみた。
ゼロからはじめるHDRP 第2回 デジタルヒューマンをプレイヤーキャラにする(6月16日号) - Unityステーション

なかなか良いモデルなので VR で見たくなり1Project Settings > Player を覗いてみたら、

と書かれていた。(「いままでのXRプラグインは非推奨。新しいのを試してね!」)

そういえば、「Unity XR プラットフォームの最新情報 - Unity Technologies Blog」で XR Plug-in などというのが入ってくると言ってたなあと思い出し、「Configuring your Unity Project for XR - Unity マニュアル」の指示に従って、テキトウに Oculus 対応することにした。

  1. Edit > Project Settings > XR Plug-in ManagementXR Plug-in Management をインストール(自分の環境ではいつの間にか入っていた。)
  2. XR Rig を配置し、MainCamera を変更。(詳細は「Configuring your Unity Project for XR - Unity マニュアル」参照)
  3. Oculus を選択→インストールされる
  4. 問題発生: oculusなんちゃらのインポートが終わらない(というか、ループしてた。)& 重くて動かない → 詰む


ループ中のスクショは忘れた。 色々いじってたらまた出てきたのでスクショ。「~.oculus.xr.~」みたいな名前のもの(com.unity.xr.oculus.standalone でした。あとopenvrなんとかも出てた。)をインポートしようとしてるらしいダイアログが定期的に表示されるも何もできないので、エディタごと Kill した。

とりあえず、Unity Editor のマイナーアップデートが降ってきていたので、エディタを最新版にして再起動。
しかし、再度ループにハマる。

冷静に考えてみたら、ダイアログに Cancel ボタンがあったのでクリック。
無事ループから脱出。
XR Plug-in Managementを見ると、Oculus のチェックボックスが入ってなかったので、これもクリック。前にやったときはきちんとチェックが入らなかったのが、今回は一発でマークが付いた。

これで、Play モードに入り直したらちゃんと見れた。
ただ、HDRP + VRなので、どうしても描画が重い。

というか前のプラグインでやったときのほうが動作軽いぞ???
これから改善されることを祈る。

まとめ(仮)

  • とりあえずエディタをアップデート
  • とりあえずダイアログをキャンセル
  • とりあえずプラグインを再設定
  • なんか動くようになった

以上! しかし、これでは終わらなかった。

追記①(XR周りのプラグインを全削除)

なんと再発したので、ここから追記していく。

コンソールには

Package Metadata store error. Check if there are any other errors in the console and make sure they are corrected before trying again.
Failure reason: Timeout trying to get package list after 30s.
UnityEditor.EditorApplication:Internal_CallUpdateFunctions()

と出ていた。
メタデータの修正ってことはプラグインをRemoveしてまたinstallすれば良いってことだろうか?

現状でも、エディタを Kill か、ダイアログを Cancel すれば、ループから出ることはできる。
ただ、再発防止にはならないので、試しに色々やってみる。

ちなみに、こんな話もあったけど保留。
XR Plugin Management infinite import loop - Unity Answers

Had this problem too. First I stopped it from looping by editing a .cs file and introducing a compiler error. Just delete a semi colon somewhere.
Then go to the Steam_VR_Settings asset and uncheck the "Auto Enable VR" box. For me this was in "Assets/SteamVR_Resources/Resources/SteamVR_Settings.asset".
Now you can fix your c# again.

まず、なんとなく Package ManagerXR Plugin Managementを Remove したら怒られた。

Could not install or assign any package with id . Check if there are any other errors in the console and make sure they are corrected before trying again.
Failure reason: Error installing package . Error Code: Failure Error Message:
UnityEditor.EditorApplication:Internal_CallUpdateFunctions()

よく分らんがとりあえず、Project Settings > XR Plug-in ManagementOculus を uncheck しておく。

XR Plugin Management を再インストール。

再度ループ → ダイアログをCancel ×2で脱出

途中で止めたので、前のバージョンのままになっている:

Remove 押したら忠告が出た。そういうのは最初から出してほしかった:

そして Remove。

今回はループに入らず、そのまま終了。ただし、コンソール曰く

Error converting build target group names .
Must specify valid information for parsing in the string.
UnityEngine.SubsystemManager:Internal_ReloadSubsystemsCompleted()

無視。

Assets フォルダを見たら、Steam VR Pluginも入ってたので、アンインストールしようとするも、Package Manager > inProject に出てこない。Package Manager > My Assetsでインストールし直してみるも、やはり検索結果に出てこないので、Removeできず。

unity3d - How to remove SteamVR from Project - Stack Overflow曰く Project Settings > PlayerVirtual Reality Supported を外せとのことなので実行。(XR Plugin Managemnet がインストールされたままだとグレーアウトして外せないので注意)

実行したはいいが、何度やっても uncheck できないので一旦保留。
なんとなく Package ManagerOpenVR Desktop を検索したらこちらも Deprecated(非推奨)と出たので Remove。しかしこっちも Remove されないので一旦保留。

やはり SteamVR Plugin を消せないのが気持ち悪いので、Ctrl + S してから Unity Editor を終了し(Kill ではない)、SteamVR フォルダと SteamVR_Resources フォルダを削除(念のため別フォルダに退避)。再度プロジェクトを開く。

ダメモトで Package Manager から OpenVR Desktopを検索& Remove → 成功。(なぜ)

とりあえず、これで初期状態に戻せたっぽいので、XR Plugin Managementを入れ直す。

追記②(XR Plugin を入れ直す)

環境を整理したところで、XR Plugin Management を入れ直すと、次のエラーが出た:

Package Metadata store error. Check if there are any other errors in the console and make sure they are corrected before trying again.
Failure reason: Timeout trying to get package list after 30s.
UnityEditor.EditorApplication:Internal_CallUpdateFunctions()

最初に見たエラーは、XR Plugin Management のインストールが原因だったのか…
問題の切り分けに時間がかかってしまった。

エラーコードで検索をかけてみる:
Bug - Package Metadata store error.Check if there are any other errors in the console and make sure they a - Unity Forum
…昨日付けでバグとして共有されてるとか、タイムリー過ぎでは。

private static float k_TimeOutDelta = 30f; // -> 300f

という修正方法は、こっちの環境でも解決策にはならなかった。

頼みの綱は、公式ドキュメント:トラブルシューティング - Unity マニュアル

いや、ちょっと待て、と思い Ctrl + P(再生)してみると、
ちゃんと動くし、ループにはハマらない、ということに気付いた。

それならと、コンソールウィンドウの Clear on Play を有効にして Ctrl + P する…

エラーが出ていない…。
OpenVR Desktop はわざと取っ払ったものだし、もうひとつはただのコメントだ。

なるほど、古いプラグインが Unity 2020 から廃止になるとは聞いていたが、同時に使用するのも駄目だったらしい。

TL;DR

  • import のループにハマったら、ダイアログのCancelボタンを何度かクリックすれば、ループから抜けられる。
  • 新しい XR Plugin は既存のプラグインと相性が悪い(かも 2)。
  • OpenVR Desktop, Steam VR Plugin, Oculus Integrationなどをすべてアンインストールしてから XR Plugin を入れると安全。
  • そもそも、新しい XR Plugin は、外部プラグインを基本的に必要としなかった気がする。(SteamVR もそのうち対応するはず 3
  • コンソールに何か表示されるが、Clear on Play を有効にすれば、再生モードをオン/オフすることで、エラーが今も続いているのかが分かる。
  • TimeOut はそこまで気にしなくて良いのかもしれない