Interfejsy API WinRT z aparatem Unity dla urządzenia HoloLens

Na tej stronie opisano sposób korzystania z interfejsów API WinRT w projekcie aparatu Unity dla urządzenia HoloLens.

interfejsy API Mixed Reality

Mixed Reality W projekcie zgodnym z platformą .NET Standard 2.0 udostępniono skoncentrowany podzbiór zestawu SDK systemu Windows, który można użyć w projekcie bez dyrektyw preprocesora. Większość interfejsów API w przestrzeniach nazw Windows.Perception i Windows.UI.Input.Spatial jest uwzględniona i może zostać rozwinięta w celu uwzględnienia dodatkowych interfejsów API w przyszłości. Przewidywane interfejsy API mogą być używane podczas uruchamiania w edytorze, co umożliwia korzystanie z trybu odtwarzania. Aby użyć tej projekcji, wprowadź następujące modyfikacje projektu:

  1. Dodaj odwołanie do pakietu UPM Mixed Reality Projekcje WinRT przy użyciu narzędzia Mixed Reality Feature Tool.

    Lista pakietu Mixed Reality Projekcje WinRT w nagłówku Obsługa platformy w narzędziu Mixed Reality Feature Tool.

  2. Odwołania prefiksu Windows do przestrzeni nazw z :Microsoft.

    using namespace Microsoft.Windows.Perception.Spatial;
    

    Uwaga

    Importowanie tego pakietu może powodować problemy z rozpoznawaniem przestrzeni nazw, jeśli projekt ma wbudowane odwołania do dowolnych Windows.* przestrzeni nazw, a kompilator próbuje rozwiązać problem z odpowiednią Microsoft.Windows.* przestrzenią nazw. W takim przypadku zaleca się zaktualizowanie tych odwołań do użycia global::Windows.* lub zaktualizowanie tych skryptów w celu zaimportowania określonej Windows.* przestrzeni nazw jako using instrukcji.

  3. Zastąp rzutowanie wskaźnika natywnego na :FromNativePtr

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

Warunkowe dołączanie wywołań interfejsu API WinRT

Interfejsy API WinRT można również używać w projektach aparatu Unity utworzonych dla platformy platforma uniwersalna systemu Windows i Xbox One przy użyciu dyrektyw preprocesora. Każdy kod, który piszesz w skryptach aparatu Unity przeznaczonych dla interfejsów API WinRT, musi być warunkowo uwzględniony tylko dla tych kompilacji.

Można to zrobić za pomocą dwóch kroków w środowisku Unity:

  1. Poziom zgodności interfejsu API musi być ustawiony na .NET 4.6 lub .NET Standard 2.0 w ustawieniach odtwarzacza
    • Edytuj>Ustawienia> projektuPlayer>Konfiguracji>Poziom zgodności interfejsu API do platformy .NET 4.6 lub .NET Standard 2.0
  2. Dyrektywa preprocesora ENABLE_WINMD_SUPPORT musi być opakowana wokół dowolnego kodu wykorzystującego winRT

Poniższy fragment kodu pochodzi ze strony ręcznej aparatu Unity dla platforma uniwersalna systemu Windows: interfejs API WinRT w skryptach języka C#. W tym przykładzie zwracany jest identyfikator reklamy, ale tylko w kompilacjach platformy UWP i konsoli Xbox One:

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
    }
}

Edytowanie skryptów w projekcie aparatu Unity C#

Po dwukrotnym kliknięciu skryptu w edytorze aparatu Unity domyślnie uruchomi skrypt w projekcie edytora. Interfejsy API WinRT wydają się być nieznane, ponieważ projekt programu Visual Studio nie odwołuje się do środowisko wykonawcze systemu Windows. Dyrektywa ENABLE_WINMD_SUPPORT jest niezdefiniowana, a wszystkie #if opakowany kod są ignorowane do momentu skompiluj projekt w rozwiązaniu programu Visual Studio platformy UWP.

Zobacz też