API de WinRT con Unity para HoloLens

En esta página se describe cómo usar las API de WinRT en el proyecto de Unity para HoloLens.

API de Mixed Reality

Se ha puesto a disposición un subconjunto centrado Mixed Reality de Windows SDK en una proyección compatible con .NET Standard 2.0, que puede usar en el proyecto sin directivas de preprocesador. La mayoría de las API de los espacios de nombres Windows.Perception y Windows.UI.Input.Spatial se incluyen y pueden expandirse para incluir API adicionales en el futuro. Las API proyectadas se pueden usar mientras se ejecutan en el Editor, lo que permite el uso del modo de reproducción. Para usar esta proyección, realice las siguientes modificaciones en el proyecto:

  1. Agregue una referencia al paquete UPM de proyecciones de WinRT Mixed Reality mediante la herramienta de características de Mixed Reality.

    Una lista del Mixed Reality paquete de proyecciones de WinRT en el encabezado Compatibilidad con la plataforma en la herramienta de características de Mixed Reality.

  2. Referencias de prefijo al Windows espacio de nombres con Microsoft.:

    using namespace Microsoft.Windows.Perception.Spatial;
    

    Nota:

    La importación de este paquete puede provocar problemas de resolución de espacios de nombres si el proyecto tiene referencias insertadas a cualquier Windows.* espacio de nombres, con el compilador que intenta resolver en un espacio de nombres correspondiente Microsoft.Windows.* . En este caso, se recomienda actualizar esas referencias para usar global::Windows.* o para actualizar esos scripts para importar el espacio de nombres específico Windows.* como una using instrucción.

  3. Reemplace las conversiones de puntero nativas por FromNativePtr:

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

Incluir condicionalmente llamadas API de WinRT

También puedes usar las API de WinRT en proyectos de Unity creados para la plataforma Plataforma universal de Windows y Xbox One mediante directivas de preprocesador. Cualquier código que escriba en scripts de Unity que tengan como destino las API de WinRT debe incluirse condicionalmente solo para esas compilaciones.

Esto se puede hacer a través de dos pasos en 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.
    • Editar>Configuración del> proyectoJugador>Configuración>Nivel de compatibilidad de API a .NET 4.6 o .NET Standard 2.0
  2. La directiva de preprocesador ENABLE_WINMD_SUPPORT debe encapsularse en torno a cualquier código que se aproveche de WinRT.

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#. En este ejemplo, se devuelve un identificador de publicidad, pero solo en compilaciones de UWP y 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
    }
}

Edición de los scripts en un proyecto de C# de Unity

Al hacer doble clic en un script en el editor de Unity, se iniciará el script de forma predeterminada en un proyecto de editor. Las API de WinRT aparecerán desconocidas porque el proyecto de Visual Studio no hace referencia al Windows Runtime. La directiva ENABLE_WINMD_SUPPORT no está definida y cualquier #if código ajustado se omite hasta que compilas el proyecto en una solución de Visual Studio para UWP.

Consulte también