次の方法で共有


HoloLens 向け Unity での WinRT API

このページでは、HoloLens 向け Unity プロジェクトで WinRT API を利用する方法について説明します。

Mixed Reality API

Windows SDK の Mixed Reality に重点を置いたサブセットが、.NET Standard 2.0 互換の投影で使用可能になりました。これは、プリプロセッサ ディレクティブなしでプロジェクトで使用できます。 Windows.Perception 名前空間と Windows.UI.Input.Spatial 名前空間のほとんどの API が含まれており、今後追加の API を含むように拡張される可能性があります。 投影された API は、エディターでの実行中に使用できます。これにより、再生モードを使用できるようになります。 この投影を使用するには、プロジェクトに次の変更を加えます。

  1. Mixed Realityフィーチャー ツールを使用して、Mixed Reality WinRT Projections UPM パッケージへの参照を追加します。

    Mixed Reality機能ツールのプラットフォーム サポート ヘッダーの下にあるMixed Reality WinRT プロジェクション パッケージの一覧。

  2. Windows 名前空間への参照の前に Microsoft. を付けます。

    using namespace Microsoft.Windows.Perception.Spatial;
    

    Note

    このパッケージをインポートすると、プロジェクトに名前空間 Windows.* へのインライン参照があり、コンパイラが対応する Microsoft.Windows.* 名前空間に対して解決を試みると、名前空間解決の問題が発生する可能性があります。 この場合は、これらの参照を使用するように global::Windows.* 更新するか、またはこれらのスクリプトを更新して、特定 Windows.* の名前空間をステートメントとして using インポートすることをお勧めします。

  3. ネイティブ ポインター キャストを FromNativePtr で置き換えます。

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

条件付きで WinRT API 呼び出しを含める

また、プリプロセッサ ディレクティブを使用して、ユニバーサル Windows プラットフォームおよび Xbox One プラットフォーム用にビルドされた Unity プロジェクトで WinRT API を使用することもできます。 WinRT API を対象とする Unity スクリプトで作成するすべてのコードは、それらのビルドついてのみ条件付きで含める必要があります。

これは、Unity で 2 つの手順を使用して行うことができます。

  1. プレーヤーの設定で、API 互換性レベルを .NET 4.6 または .NET Standard 2.0 に設定する必要があります
    • [編集]>[プロジェクト設定]>[プレイヤー]>[構成]>[API 互換性レベル][.NET 4.6] または [.NET Standard 2.0]
  2. WinRT を利用したコードをプリプロセッサ ディレクティブ ENABLE_WINMD_SUPPORT でラップする必要があります

次のコード スニペットは、ユニバーサル Windows プラットフォーム: C# スクリプトの WinRT API に関するページにある Unity マニュアル ページから抜粋したものです。 この例では、UWP と Xbox One のビルドでのみ広告 ID が返されます。

using UnityEngine;
public class WinRTAPI : MonoBehaviour {
    void Update() {
        auto adId = GetAdvertisingId();
        // ...
    }

    string GetAdvertisingId() {
        #if ENABLE_WINMD_SUPPORT
            return Windows.System.UserProfile.AdvertisingManager.AdvertisingId;
        #else
            return "";
        #endif
    }
}

Unity C# プロジェクトでスクリプトを編集する

Unity エディターでスクリプトをダブルクリックすると、既定ではエディター プロジェクトでスクリプトが起動されます。 Visual Studio プロジェクトでは Windows ランタイムを参照していないため、WinRT API は不明であるように見えます。 ENABLE_WINMD_SUPPORT ディレクティブは定義されておらず、#if でラップされたコードは、プロジェクトを UWP Visual Studio ソリューションにビルドするまで無視されます。

関連項目