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以上です。
nugetから取得すると自動的に9.0.1以降がセットアップされるのですが、この時点でバージョン違いのNewtonsoft.Jsonが複数セットされます。
厄介なことにそのまま何事もなくビルドと配置が終わります。この時点ではどちらかのバージョンのみが配置されるようです。動かすとDLLが見つからずにエラーが発生します。
対応策
使いたいライブラリのバージョンを合わせる。
今回のMilkcocoaのライブラリではバージョンが0.3.0であればMRTK内のNewtonsoft.Jsonを合うので、それを使用したところ問題は解消しました。ただし、この方法はライブラリ側が偶然古いバージョンを使っていたからできた方法ですが、現状この方法以外の回避策はないと思います。
最後に
MRTKでNewtonsoft.Jsonがある場所は「Assets\HoloToolkit\Utilities\Scripts\GLTF\Plugins」配下になります。ですが、ここを修正するのは影響範囲を考えると難しく、当面はバージョンを落とす対応しかないと思います。