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:
Fügen Sie mithilfe des Mixed Reality Feature-Tools einen Verweis auf das UPM-Paket Mixed Reality WinRT-Projektionen hinzu.
Präfixverweise auf den
Windows
Namespace mitMicrosoft.
: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 entsprechendenMicrosoft.Windows.*
Namespace zu lösen. In diesem Fall wird empfohlen, entweder diese Verweise für die Verwendungglobal::Windows.*
zu aktualisieren oder diese Skripts zu aktualisieren, um den spezifischenWindows.*
Namespace alsusing
Anweisung zu importieren.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:
- 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
- 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.