SteamVR Plugin2.5.0 と MRTK 2.3を共存させる

最近、技術トピックは社内のWiki(システムはesa)にばかり書いていてブログをサボり気味だったので反省。

それにしてもコロナウイルスが猛威を振るっていますね。オリンピック延期が決まって(正直1年後でも怪しい気がするんだけど)、今週末は東京都から外出自粛要請が出て、今頃はスーパーが買い貯めの人で溢れていることでしょう。

で、昨日ハマった、SteamVR Plugin2.5.0 と MRTK 2.3の共存についてのメモです。

MRTK2.3自体がOpenVRに対応しているので、SteamVR PluginとMRTKを同時に使うことはあまりないと思うのですが、既存のSteamVRプロジェクトをHoloLens対応させるために、SteamVR Pluginの後にMRTK2.3をインストールしました。
すると、コンパイルエラーの嵐で、内容は「SteamVR名前空間のクラスが無いよ」という致命的なものでした。

Gitのログから変更履歴を辿ると、MRTKインストール時に、「Assets/SteamVR/Plugins/openvr_api.cs」がUpdateされていて、それが原因ということがわかってきました。しかし、MRTKは「MixedRealityToolkit」で始まるフォルダにしかインストールされないハズ。どうしてSteamVRフォルダの内容が上書きされたのか不明でした。

悩んだ過程がこちらのTweet↓

UnityPackageを7zipで解凍して、中身のテキストファイルをgrepしてもStreamVRフォルダに配置されるファイルはありませんでした。
大量のテキストファイルをgrepするには、Git Bash等で下記を使うと便利です。

$ find ./ -type f | xargs grep openvr_api.cs

そして気が付いたのがGUIDの件。UnityPackageは、パスやファイル名が異なっていても、同じGUIDを持つオブジェクトは上書きする、という特性があることを知りました。

今回は、MRTKに入っているopenvr_api.csが、SteamVRのopenvr_api.csと同じGUIDを持っていたため、上書きされてしまったのがエラーの原因でした。

これを解消するためには、MRTKインストール前に、SteamVR/Plugins/openvr_api.cs のファイルを複製して、元の方を削除します。これでGUIDを強制的に変更できるので、MRTKインストール時に上書きされなくなります。

MRTKのGuitHubでバグ報告をしたところ、秒速で修正されて、MRTK2.4リリース時には直るそうです。(早い!)

Describe the bug When instaling MRTK after SteamVR Plugin, existing openvr_api will be overridden and causes a compile error. To reproduce Install SteamVR Plugi...

UnityPackageの性質について勉強できたエラーでした。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク