Unity
UWP
MR
HoloLens
VisualStudio2017

Mixed Reality Toolkit - Unityを使いUWPで追加開発するときはJSONに気を付ける

Mixed Reality Toolkit - Unity内でJSONライブラリ使っているという話

REST APIやWebSocket、パラメータの保存等最近はデファクト的になってきているJSONですが、Mixed Reality toolkit - Unity(以下MRTK)でも利用されています。
あまり意識をしていなかったのですが問題が発生し、色々対処することになったので情報共有します。

問題になっていたところ

例よってUnityだけで開発できる場合はさほど問題にはならないと思います。
一方、UWPにビルドした後に追加で実装する場合注意が必要です。
今回使っていたMRTKは以下のバージョンです。

  • MRTK-Unity 2017.2.1.0(HoloToolkit-Unity-2017.2.1.0.unitypackage)

MRTKはNewtonsoft.Json(8.0.3.19514)を利用しています。
このため、UWP側で追加するOSSライブラリがNewtonsoft.Jsonを使う場合はバージョンが同じになるように調整が必要になります。

もう少し詳細

今回問題になったのは、UWP側でMilkcocoa用のUWPのライブラリを利用するときでした。ライブラリの最新(1.3.0)はNewtonsoft.Jsonバージョンが9.0.1以上です。
image.png

nugetから取得すると自動的に9.0.1以降がセットアップされるのですが、この時点でバージョン違いのNewtonsoft.Jsonが複数セットされます。
厄介なことにそのまま何事もなくビルドと配置が終わります。この時点ではどちらかのバージョンのみが配置されるようです。動かすとDLLが見つからずにエラーが発生します。

対応策

使いたいライブラリのバージョンを合わせる。

今回のMilkcocoaのライブラリではバージョンが0.3.0であればMRTK内のNewtonsoft.Jsonを合うので、それを使用したところ問題は解消しました。ただし、この方法はライブラリ側が偶然古いバージョンを使っていたからできた方法ですが、現状この方法以外の回避策はないと思います。

最後に

MRTKでNewtonsoft.Jsonがある場所は「Assets\HoloToolkit\Utilities\Scripts\GLTF\Plugins」配下になります。ですが、ここを修正するのは影響範囲を考えると難しく、当面はバージョンを落とす対応しかないと思います。