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が必要ではない?敢えて古いものを対象にすることも少ないだろうが。
また Backend が .NET の時とは違い、配置先のOSバージョンが Minimum Platform Version 以下だと正しくエラーが表示される。
影響のあるケース
今後HoloLens2が登場するにあたって、アプリの動作環境が「全世代HoloLens」と互換性を担保するケースは少ないかもしれない。 だが流通が安定するまでの過渡期において、一時的にHoloLens1との互換性を必要とする場合は、この辺を考慮したほうが良いかもしれない。
参考リンク
- .NET Standard | Microsoft Docs
- バージョン アダプティブ アプリ - Windows UWP applications | Microsoft Docs
- Unity や UWP で不足している .NET API - Windows UWP applications | Microsoft Docs
- Unity 特有のパフォーマンス劣化の落とし穴 2018年歳末まとめ - part 2 - @hadashiA
- Unity開発するにあたって知っておきたいコンパイラのすゝめ(Part0.5~.NET Frameworkの概要編~) - Qiita
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 の設定だけ気にすれば良い。