yotiky Tech Blog

とあるエンジニアの備忘録

Windows のバージョンと HoloLens 、Unity の設定の関係

TL;DR

  • Windows のOSバージョンとHoloLensの関係表はバージョン履歴の項参照
  • UnityのBuild Settingsで、Target SDK Version と Minimum Platform VersionはOSビルド番号
  • Scripting Backendで、.NETを選択した場合は .NET Standard 2.0 は使えない
  • Scripting Backend を IL2CPP、Api Compatibility Level を .NET Standard 2.0 にした場合で、HoloToolkit使ってるなら Target SDK Version は10.0.16299以降が必要

バージョン履歴

バージョン OSビルド コードネーム 別名 リリース日 Windows 10 SDK HoloLens対応
1903 10.0.18362 19H1 May 2019 Update 2019 年 5 月 1903 ここからLTSにより非対応となる
1809 10.0.17763 Redstone 5 October 2018 Update 2018 年 11 月 1809 機能的アップデートの最終バージョン
1803 10.0.17134 Redstone 4 April 2018 Update 2018 年 5 月 1803
1709 10.0.16299 Redstone 3 Fall Creators Update 2017 年 10 月 10.0.16299.91
1703 10.0.15063 Redstone 2 Creators Update 2017 年 4 月 10.0.15063.468
1607 10.0.14393 Redstone 1 Anniversary Update 2016 年 8 月 10.0.14393.795
10.0.14342.1016 2016 年 5 月 大型アップデートではない
10.0.11082.1033 2016 年 3 月 初対応バージョン
大型アップデートではない
1511 10.0.10586 Threshold 2 November Update 2015 年 11 月 10.0.10586.212 非対応
1507 10.0.10240 Threshold 1 なし (Released in July 2015) 2015 年 7 月 10.0.10240 非対応
Windows 10 リリースバージョン

※以前の記事に、Release Noteへのリンクなど少し詳細な内容を書いたものがあります。

参考リンク

Unityの設定との関係

検証環境

  • Unity 2018.4.2f1
  • HoloToolkit 2017.4.3
  • HoloLens 1st gen

Build Settings

Target SDK Version と Minimum Platform Version は、OSビルド番号を指す。
これらは、Player Settings の Scripting Runtime Version、Scripting Backend、Api Compatibility Levelを変更しても選択できる項目に変化はない。 ただし、選択した内容や使用しているAPIによってビルド時にエラーになる場合がある。

10.0.10586 (Threshold 2) のみ、Minimum Platformにあるが Target SDK の選択に存在しない。理由は定かではない、が HoloLens対応以前なので放置。

Scripting Backend に .NET を選択した場合

Minimum Platform は10240.0以外は選択できない。Unityのビルド時にエラーになる。
Unityのビルドで出力されたC#プロジェクトの設定は、最小バージョン10240.0~15063.0までは変更してもビルドが通る。それ以降のバージョンは、AssemblyConverter.exeがコード1で終了するエラーになるようだ。

Api Compatibility Level で .NET Standard 2.0 を選択できる。Unity内では 2.0の機能(BinaryFormatterで検証)はエラーにならないが、Unityでビルドした時(UWPのプロジェクトを出力する時)にエラーになる。つまり、Backend が .NET の時に Standard 2.0 は使えない。

下記リンクを参考にすると、.NET な Backend は、Unity内ではMonoだがHoloLensではWindows 付属の .NET Standard 1.4 で動くとかなんとか。

What .NET stack for UWP/HoloLens? - Unity Forum

ちなみにUnityのビルドで一度出力されたC#プロジェクトの設定は、Unityで再ビルドしても更新されないようだ。検証するためには毎回フォルダ毎破棄する必要あり。IL2CPPは問題なかった気がする?

Scripting Backend に IL2CPP を選択した場合

Api Compatibility Level が .NET Standard 2.0 の場合、Target SDK Version は 10.0.16299以降じゃないとHoloToolkit内でエラーになる。HoloToolkit側で新しい機能を使ってそうなので、素直に10.0.16299以降を選択する。Minimum Platform Version は10240でも怒られない。

10.0.16299はUWPで .NET Standard 2.0 を使う場合に必要な最小バージョン。 *1

Unityのビルドで出力されたC++プロジェクトの設定は、ターゲットプラットフォームのバージョンをより古いものに変更すると使用している機能に応じて必要なバージョンが求められるようだ。 UnityのIL2CPPによって生成されたコードなのでどのバージョンが必要になるのか謎い。。

BinaryFormatterは、10.0.10563以上が必要らしい。 つまり必ずしも10.0.16299が必要ではない?敢えて古いものを対象にすることも少ないだろうが。

f:id:yotiky:20191030013114p:plain

また Backend が .NET の時とは違い、配置先のOSバージョンが Minimum Platform Version 以下だと正しくエラーが表示される。

f:id:yotiky:20191030013039p:plain

影響のあるケース

今後HoloLens2が登場するにあたって、アプリの動作環境が「全世代HoloLens」と互換性を担保するケースは少ないかもしれない。 だが流通が安定するまでの過渡期において、一時的にHoloLens1との互換性を必要とする場合は、この辺を考慮したほうが良いかもしれない。

参考リンク

UnityとC#のバージョン

Scripting Runtime Version は、Mono もしくは IL2CPP が対応する .NET Frameworkのバージョン。 仕組み上全く同じというわけではなく、そのバージョン相当という位置づけ。

Scripting Runtime Version C# Version
.NET 3.5 C# 4 *2
.NET 4.6 C# 6

※最新の記事はこちら

Unity のバージョンと Mono のバージョンの間には直接的なマッピングはないらしい*3 ので、Scripting Runtime Version の設定だけ気にすれば良い。

参考リンク