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 は、エディターでの実行中に使用できます。これにより、再生モードを使用できるようになります。 この投影を使用するには、プロジェクトに次の変更を加えます。
Mixed Realityフィーチャー ツールを使用して、Mixed Reality WinRT Projections UPM パッケージへの参照を追加します。
Windows
名前空間への参照の前にMicrosoft.
を付けます。using namespace Microsoft.Windows.Perception.Spatial;
Note
このパッケージをインポートすると、プロジェクトに名前空間
Windows.*
へのインライン参照があり、コンパイラが対応するMicrosoft.Windows.*
名前空間に対して解決を試みると、名前空間解決の問題が発生する可能性があります。 この場合は、これらの参照を使用するようにglobal::Windows.*
更新するか、またはこれらのスクリプトを更新して、特定Windows.*
の名前空間をステートメントとしてusing
インポートすることをお勧めします。ネイティブ ポインター キャストを
FromNativePtr
で置き換えます。var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
条件付きで WinRT API 呼び出しを含める
また、プリプロセッサ ディレクティブを使用して、ユニバーサル Windows プラットフォームおよび Xbox One プラットフォーム用にビルドされた Unity プロジェクトで WinRT API を使用することもできます。 WinRT API を対象とする Unity スクリプトで作成するすべてのコードは、それらのビルドついてのみ条件付きで含める必要があります。
これは、Unity で 2 つの手順を使用して行うことができます。
- プレーヤーの設定で、API 互換性レベルを .NET 4.6 または .NET Standard 2.0 に設定する必要があります
- [編集]>[プロジェクト設定]>[プレイヤー]>[構成]>[API 互換性レベル] を [.NET 4.6] または [.NET Standard 2.0]
- 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 ソリューションにビルドするまで無視されます。