r本日は HoloLens の技術調査枠です。
アプリケーションの中で HoloLens のOSバージョンを取得する方法をまとめます。
HoloLens のOSバージョンをアプリ内で判定できれば、以前紹介したOS組み込みのキーボードなど、特定のOSバージョンでしか動作しないコードを分岐することができます。
bluebirdofoz.hatenablog.com
プロジェクトとシーンの準備
以下の記事を元にHoloLens(WindowsMR)プロジェクトを作成します。
bluebirdofoz.hatenablog.com
2019/2/28 現在、MRTK 2017 の最新バージョンは 2017.4.3.0 です。
取得したOSバージョンをアプリ内で確認するため、シーン内に Panel と Text オブジェクトを配置します。
以下の通り、オブジェクトを追加して一部のパラメータを変更しました。
・Canvas
Pos X:0 Pos Y:0 Pos Z:2 Width:150 Height:50 Scale X:0.005 Scale Y:0.005 Scale Z:0.005 Render Mode:WorldSpace
・Panel
変更無し
・Text
Width:140 Height:40
OSバージョンの取得方法
UWP アプリでOSバージョンなどのハード情報を取得するには VersionInfo クラスを利用します。
docs.microsoft.com
VersionInfo は以下の2つの情報を保持します。
・DeviceFamily:デバイスの識別子
・DeviceFamilyVersion:OSバージョン
HoloLens の場合、DeviceFamily は Windows.Holographic が取得できます。
これらの情報を取得し、テキストフィールドに表示するスクリプトを作成します。
・ShowVersionInfo.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ShowVersionInfo : MonoBehaviour { /// <summary> /// 文字列を反映するテキストフィールド /// </summary> [SerializeField, Tooltip("文字列を反映するテキストフィールド")] private Text TargetTextField; /// <summary> /// 起動時処理 /// </summary> void Start () { string DeviceFamily; string OSVersionLongText; string OSVersion; // VersionInfo を参照する // UWPのプラットフォームでのみ利用可能 # if WINDOWS_UWP // DeviceFamily を文字列として取得する DeviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily; // OSバージョンを文字列として取得する // ここで得られるのは64bitの整数の文字列である OSVersionLongText = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamilyVersion; // 一度数値情報に変換し、16bitずつ取り出すと // 「XX.XX.XX.XX」のフォーマットになる ulong OSVersionLong = ulong.Parse(OSVersionLongText); ulong OSVersionLong1 = (OSVersionLong & 0xFFFF000000000000L) >> 48; ulong OSVersionLong2 = (OSVersionLong & 0x0000FFFF00000000L) >> 32; ulong OSVersionLong3 = (OSVersionLong & 0x00000000FFFF0000L) >> 16; ulong OSVersionLong4 = OSVersionLong & 0x000000000000FFFFL; OSVersion = string.Format("{0}.{1}.{2}.{3}", OSVersionLong1, OSVersionLong2, OSVersionLong3, OSVersionLong4); # else DeviceFamily = "UnityEditor"; OSVersion = "0.0.0.0"; # endif // テキストフィールドに文字列を設定する TargetTextField.text = DeviceFamily + System.Environment.NewLine; TargetTextField.text += OSVersion; } }
作成したスクリプトを Panel オブジェクトにアタッチします。
OSバージョンを表示するテキストフィールドを指定します。
TargetTextField に Text オブジェクトを設定します。
これで設定完了です。
VersionInfo は UnityEditor 上では取得できないので、動作確認は HoloLens 上で行います。
HoloLens(WindowsMR)プロジェクトの作成手順に従って、アプリを HoloLens にインストールします。
アプリを起動すると、テキストフィールドにOSバージョンが表示されました。