APIs do WinRT com Unity para HoloLens

Esta página descreve como fazer uso de APIs do WinRT em seu projeto do Unity para HoloLens.

APIs de Realidade Misturada

Um Realidade Misturada subconjunto focado do SDK do Windows foi disponibilizado em uma projeção compatível com o .NET Standard 2.0, que você pode usar em seu projeto sem diretivas de pré-processador. A maioria das APIs nos namespaces Windows.Perception e Windows.UI.Input.Spatial está incluída e pode se expandir para incluir APIs adicionais no futuro. As APIs projetadas podem ser usadas durante a execução no Editor, o que permite o uso do Modo de Reprodução. Para usar essa projeção, faça as seguintes modificações em seu projeto:

  1. Adicione uma referência ao pacote UPM Realidade Misturada Projeções do WinRT usando a Ferramenta de Recursos do Realidade Misturada.

    Uma listagem do pacote Realidade Misturada Projeções do WinRT no cabeçalho Suporte à Plataforma na Ferramenta de Recursos do Realidade Misturada.

  2. Referências de prefixo para o Windows namespace com Microsoft.:

    using namespace Microsoft.Windows.Perception.Spatial;
    

    Observação

    A importação desse pacote poderá causar problemas de resolução de namespace se o projeto tiver referências embutidas a namespacesWindows.*, com o compilador tentando resolve em um namespace correspondenteMicrosoft.Windows.*. Nesse caso, é recomendável atualizar essas referências para usar global::Windows.* ou atualizar esses scripts para importar o namespace específico Windows.* como uma using instrução.

  3. Substitua conversões de ponteiro nativo por FromNativePtr:

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

Incluir condicionalmente chamadas à API do WinRT

Você também pode usar as APIs do WinRT em projetos do Unity criados para o Plataforma Universal do Windows e a plataforma Xbox One usando diretivas de pré-processador. Qualquer código que você escrever em scripts do Unity direcionados às APIs do WinRT deve ser incluído condicionalmente apenas para esses builds.

Isso pode ser feito por meio de duas etapas no Unity:

  1. O nível de compatibilidade da API deve ser definido como .NET 4.6 ou .NET Standard 2.0 nas configurações do player
    • Editar>Configurações do> ProjetoJogador>Configuração>Nível de compatibilidade de API para .NET 4.6 ou .NET Standard 2.0
  2. A diretiva de pré-processador ENABLE_WINMD_SUPPORT deve ser encapsulada em torno de qualquer código aproveitado por WinRT

O snippet de código a seguir é da página manual do Unity para Plataforma Universal do Windows: API do WinRT em scripts C#. Neste exemplo, uma ID de anúncio é retornada, mas somente em builds UWP e 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
    }
}

Editar seus scripts em um projeto C# do Unity

Quando você clicar duas vezes em um script no editor do Unity, por padrão, ele iniciará o script em um projeto do editor. As APIs do WinRT parecerão desconhecidas porque o projeto do Visual Studio não faz referência ao Windows Runtime. A diretiva ENABLE_WINMD_SUPPORT é indefinida e qualquer código encapsulado #if é ignorado até que você compile seu projeto em uma solução UWP do Visual Studio.

Confira também