Dela via


WinRT-API:er med Unity för HoloLens

Den här sidan beskriver hur du använder WinRT-API:er i ditt Unity-projekt för HoloLens.

Mixed Reality API:er

En Mixed Reality fokuserad delmängd av Windows SDK har gjorts tillgänglig i en .NET Standard 2.0-kompatibel projektion, som du kan använda i projektet utan preprocessor-direktiv. De flesta API:er i Windows.Perception och Windows.UI.Input.Spatial-namnrymder ingår och kan utökas till att omfatta ytterligare API:er i framtiden. De projicerade API:erna kan användas när de körs i redigeraren, vilket möjliggör användning av uppspelningsläge. Om du vill använda den här projektionen gör du följande ändringar i projektet:

  1. Lägg till en referens till UPM-paketet Mixed Reality WinRT Projections med hjälp av Mixed Reality-funktionsverktyget.

    En lista över paketet Mixed Reality WinRT-projektioner under plattformssupporthuvudet i funktionsverktyget för Mixed Reality.

  2. Prefixreferenser till Windows namnområdet med Microsoft.:

    using namespace Microsoft.Windows.Perception.Spatial;
    

    Anteckning

    Om du importerar det här paketet kan det orsaka problem med namnområdesmatchning om projektet har infogade referenser till några Windows.* namnområden, där kompilatorn försöker matcha mot ett motsvarande Microsoft.Windows.* namnområde. I det här fallet rekommenderar vi att du antingen uppdaterar dessa referenser för att använda global::Windows.* eller uppdatera skripten för att importera det specifika Windows.* namnområdet som en using instruktion.

  3. Ersätt inbyggda pekare med FromNativePtr:

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

Inkludera WinRT API-anrop villkorligt

Du kan också använda WinRT-API:er i Unity-projekt som skapats för Universell Windows-plattform- och Xbox One-plattformen med hjälp av preprocessor-direktiv. All kod som du skriver i Unity-skript som riktar in sig på WinRT-API:er måste inkluderas villkorsstyrt endast för dessa versioner.

Detta kan göras via två steg i Unity:

  1. API-kompatibilitetsnivån måste anges till .NET 4.6 eller .NET Standard 2.0 i spelarinställningarna
    • Redigera>Projektinställningar>Spelare>Konfiguration>Api-kompatibilitetsnivå till .NET 4.6 eller .NET Standard 2.0
  2. Preprocessor-direktivet ENABLE_WINMD_SUPPORT måste omslutas med all WinRT-utnyttjad kod

Följande kodfragment kommer från unity-sidan för Universell Windows-plattform: WinRT API i C#-skript. I det här exemplet returneras ett annonserings-ID, men endast på UWP- och Xbox One-versioner:

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

Redigera dina skript i ett Unity C#-projekt

När du dubbelklickar på ett skript i Unity-redigeraren startar det som standard skriptet i ett redigeringsprojekt. WinRT-API:erna verkar vara okända eftersom Visual Studio-projektet inte refererar till Windows Runtime. ENABLE_WINMD_SUPPORT-direktivet är odefinierat och all #if omsluten kod ignoreras tills du skapar projektet i en UWP Visual Studio-lösning.

Se även