WinRT-APIs mit Unity für HoloLens

Auf dieser Seite wird beschrieben, wie Sie WinRT-APIs in Ihrem Unity-Projekt für HoloLens verwenden.

Mixed Reality-APIs

Eine Mixed Reality fokussierte Teilmenge des Windows SDK wurde in einer .NET Standard 2.0-kompatiblen Projektion verfügbar gemacht, die Sie in Ihrem Projekt ohne Präprozessordirektiven verwenden können. Die meisten APIs in den Namespaces "Windows.Perception" und "Windows.UI.Input.Spatial" sind enthalten und können in Zukunft um zusätzliche APIs erweitert werden. Die projizierten APIs können während der Ausführung im Editor verwendet werden, was die Verwendung des Wiedergabemodus ermöglicht. Um diese Projektion zu verwenden, nehmen Sie die folgenden Änderungen an Ihrem Projekt vor:

  1. Fügen Sie mithilfe des Mixed Reality Feature-Tools einen Verweis auf das UPM-Paket Mixed Reality WinRT-Projektionen hinzu.

    Eine Liste des Mixed Reality WinRT-Projektionspakets unter dem Header Platform Support im Mixed Reality Featuretool.

  2. Präfixverweise auf den Windows Namespace mit Microsoft.:

    using namespace Microsoft.Windows.Perception.Spatial;
    

    Hinweis

    Das Importieren dieses Pakets kann Zu Problemen bei der Namespaceauflösung führen, wenn Ihr Projekt Inlineverweise auf Namespaces Windows.* aufweist, wobei der Compiler versucht, für einen entsprechenden Microsoft.Windows.* Namespace zu lösen. In diesem Fall wird empfohlen, entweder diese Verweise für die Verwendung global::Windows.* zu aktualisieren oder diese Skripts zu aktualisieren, um den spezifischen Windows.* Namespace als using Anweisung zu importieren.

  3. Ersetzen Sie native Zeigerumwandlungen durch FromNativePtr:

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

WinRT-API-Aufrufe bedingt einschließen

Sie können auch die WinRT-APIs in Unity-Projekten verwenden, die für die Universelle Windows-Plattform- und Xbox One-Plattform erstellt wurden, indem Sie Präprozessordirektiven verwenden. Code, den Sie in Unity-Skripts schreiben, die WinRT-APIs als Ziel haben, müssen nur für diese Builds bedingt enthalten sein.

Dies kann in Unity in zwei Schritten erfolgen:

  1. Der API-Kompatibilitätsgrad muss in den Playereinstellungen auf .NET 4.6 oder .NET Standard 2.0 festgelegt werden.
    • Bearbeiten>Projekteinstellungen>Spieler>Konfiguration>Api-Kompatibilitätsgrad zu .NET 4.6 oder .NET Standard 2.0
  2. Die Präprozessordirektive ENABLE_WINMD_SUPPORT muss um jeden von WinRT genutzten Code umschlossen werden.

Der folgende Codeausschnitt stammt von der Unity-Handbuchseite für Universelle Windows-Plattform: WinRT-API in C#-Skripts. In diesem Beispiel wird eine Werbe-ID zurückgegeben, jedoch nur für UWP- und Xbox One-Builds:

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

Bearbeiten Ihrer Skripts in einem Unity C#-Projekt

Wenn Sie im Unity-Editor auf ein Skript doppelklicken, wird das Skript standardmäßig in einem Editorprojekt gestartet. Die WinRT-APIs scheinen unbekannt zu sein, da das Visual Studio-Projekt nicht auf die Windows-Runtime verweist. Die ENABLE_WINMD_SUPPORT-Direktive ist undefiniert, und alle #if umschlossenen Code werden ignoriert, bis Sie Ihr Projekt in eine UWP Visual Studio-Projektmappe erstellen.

Weitere Informationen