MRが楽しい

MRやVRについて学習したことを書き残す

HoloLensのOSバージョンをアプリケーションで取得する

r本日は HoloLens の技術調査枠です。
アプリケーションの中で HoloLens のOSバージョンを取得する方法をまとめます。
f:id:bluebirdofoz:20190228093243j:plain

HoloLens のOSバージョンをアプリ内で判定できれば、以前紹介したOS組み込みのキーボードなど、特定のOSバージョンでしか動作しないコードを分岐することができます。
bluebirdofoz.hatenablog.com

プロジェクトとシーンの準備

以下の記事を元にHoloLens(WindowsMR)プロジェクトを作成します。
bluebirdofoz.hatenablog.com

2019/2/28 現在、MRTK 2017 の最新バージョンは 2017.4.3.0 です。
f:id:bluebirdofoz:20190228093310j:plain

取得した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

f:id:bluebirdofoz:20190228093320j:plain

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 オブジェクトにアタッチします。
f:id:bluebirdofoz:20190228093341j:plain

OSバージョンを表示するテキストフィールドを指定します。
TargetTextField に Text オブジェクトを設定します。
f:id:bluebirdofoz:20190228093351j:plain

これで設定完了です。
VersionInfo は UnityEditor 上では取得できないので、動作確認は HoloLens 上で行います。

HoloLens(WindowsMR)プロジェクトの作成手順に従って、アプリを HoloLens にインストールします。
f:id:bluebirdofoz:20190228093401j:plain
アプリを起動すると、テキストフィールドにOSバージョンが表示されました。