API de WinRT con Unity para HoloLensWinRT APIs with Unity for HoloLens

En esta página se describe cómo hacer uso de las API de WinRT en el proyecto de Unity para HoloLens.This page describes how to make use of WinRT APIs in your Unity project for HoloLens.

API de realidad mixtaMixed Reality APIs

Un subconjunto centrado en la realidad mixta del Windows SDK se ha puesto a disposición en una proyección compatible con .NET Standard 2,0, que puede usar en el proyecto sin las directivas de preprocesador.A Mixed Reality focused subset of the Windows SDK has been made available in a .NET Standard 2.0 compatible projection, which you can use in your project without preprocessor directives. La mayoría de las API de Windows.Most APIs in the Windows. Los espacios de nombres imception y Windows. UI. Input. Spatial se incluyen y se pueden expandir para incluir API adicionales en el futuro.Perception and Windows.UI.Input.Spatial namespaces are included and may expand to include additional APIs in the future. Las API proyectadas se pueden usar mientras se ejecutan en el editor, lo que permite el uso del modo de reproducción.The projected APIs can be used while running in the Editor, which enables the use of Play Mode. Para usar esta proyección, realice las siguientes modificaciones en el proyecto:To use this projection, make the following modifications to your project:

  1. Agregue una referencia al paquete de Nuget Microsoft. Windows. MixedReality. DotNetWinRT mediante Nuget para Unity.Add a reference to the Microsoft.Windows.MixedReality.DotNetWinRT NuGet package using NuGet for Unity.
  2. Referencias de prefijo al Windows espacio de nombres con Microsoft. :Prefix references to the Windows namespace with Microsoft.:
using namespace Microsoft.Windows.Perception.Spatial;
  1. Reemplace las conversiones de puntero nativas por FromNativePtr :Replace native pointer casts with FromNativePtr:
var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);

Inclusión condicional de llamadas API de WinRTConditionally include WinRT API calls

También puede usar las API de WinRT en proyectos de Unity creados para el Plataforma universal de Windows y la plataforma Xbox One mediante directivas de preprocesador.You can also use the WinRT APIs in Unity projects built for the Universal Windows Platform and Xbox One platform by using preprocessor directives. Cualquier código que escriba en scripts de Unity que tengan como destino las API de WinRT debe incluirse condicionalmente solo para esas compilaciones.Any code that you write in Unity scripts that target WinRT APIs must be conditionally included for only those builds.

Esto puede hacerse a través de dos pasos en Unity:This can be done via two steps in Unity:

  1. El nivel de compatibilidad de API debe establecerse en .net 4,6 o .net Standard 2,0 en la configuración del reproductor.API compatibility level must be set to .NET 4.6 or .NET Standard 2.0 in the player settings
    • Editar > Configuración > del proyecto Reproductor > de Configuración > de Nivel de compatibilidad de API a .net 4,6 o .net Standard 2,0Edit > Project Settings > Player > Configuration > Api Compatibility Level to .NET 4.6 or .NET Standard 2.0
  2. La Directiva de preprocesador ENABLE_WINMD_SUPPORT debe ajustarse alrededor de cualquier código aprovechado por WinRTThe preprocessor directive ENABLE_WINMD_SUPPORT must be wrapped around any WinRT-leveraged code

El siguiente fragmento de código procede de la página manual de Unity para plataforma universal de Windows: API de WinRT en scripts de C#.The following code snippet is from the Unity manual page for Universal Windows Platform: WinRT API in C# scripts. En este ejemplo, se devuelve un identificador de anuncio, pero solo en las compilaciones de UWP y Xbox One:In this example, an advertising ID is returned, but only on UWP and 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
    }
}

Editar los scripts en un proyecto de C# de UnityEdit your scripts in a Unity C# project

Al hacer doble clic en un script en el editor de Unity, se iniciará el script de forma predeterminada en un proyecto de editor.When you double-click a script in the Unity editor, it will by default launch your script in an editor project. Parece que las API de WinRT son desconocidas porque el proyecto de Visual Studio no hace referencia al Windows Runtime.The WinRT APIs will appear to be unknown because the Visual Studio project doesn't reference the Windows Runtime. La directiva ENABLE_WINMD_SUPPORT no está definida y cualquier código ajustado #if se omite hasta que compile el proyecto en una solución de Visual Studio para UWP.The ENABLE_WINMD_SUPPORT directive is undefined and any #if wrapped code is ignored until you build your project into a UWP Visual Studio solution.

Consulte tambiénSee also