Implementar iniciadores de aplicações 3D (aplicações UWP)

Nota

Esta funcionalidade foi adicionada como parte do Fall Creators Update (RS3) de 2017 para headsets envolventes e é suportada pelo HoloLens com a Atualização de Abril de 2018 do Windows 10. Certifique-se de que a sua aplicação tem como destino uma versão do Windows SDK superior ou igual a 10.0.16299 em Headsets envolventes e 10.0.17125 no HoloLens. Pode encontrar o SDK do Windows mais recente aqui.

O Windows Mixed Reality casa é o ponto de partida onde os utilizadores acedem antes de iniciarem aplicações. Ao criar uma aplicação UWP para Windows Mixed Reality, por predefinição, as aplicações são iniciadas como 2D com o logótipo da aplicação. Ao desenvolver experiências para Windows Mixed Reality, um iniciador 3D pode, opcionalmente, ser definido para substituir o iniciador 2D predefinido para a sua aplicação. Em geral, os iniciadores 3D são recomendados para iniciar aplicações envolventes que tiram os utilizadores do Windows Mixed Reality casa. O iniciador 2D predefinido é preferido quando a aplicação é ativada. Também pode criar uma ligação avançada 3D (secondaryTile) como um iniciador 3D para conteúdo numa aplicação UWP 2D.

Processo de criação do iniciador de aplicações 3D

Existem três passos para criar um iniciador de aplicações 3D:

  1. Estruturação e conceitos
  2. Modelação e exportação
  3. Integrá-la na sua aplicação (este artigo)

Os recursos 3D a serem utilizados como iniciadores para a sua aplicação devem ser criados com as diretrizes de criação de Windows Mixed Reality para garantir a compatibilidade. Os recursos que não cumpram esta especificação de criação não serão compostos na casa Windows Mixed Reality.

Configurar o iniciador 3D

Quando cria um novo projeto no Visual Studio, este cria um mosaico predefinido simples que apresenta o nome e o logótipo da sua aplicação. Para substituir esta representação 2D por um modelo 3D personalizado, edite o manifesto da aplicação da sua aplicação para incluir o elemento "MixedRealityModel" como parte da definição de mosaico predefinida. Para reverter para o iniciador 2D, remova a definição MixedRealityModel do manifesto.

XML

Primeiro, localize o manifesto do pacote de aplicação no projeto atual. Por predefinição, o manifesto terá o nome Package.appxmanifest. Se estiver a utilizar o Visual Studio, clique com o botão direito do rato no manifesto no visualizador de soluções e selecione Ver origem para abrir o xml para edição.

Na parte superior do manifesto, adicione o esquema uap5 e inclua-o como um espaço de nomes ignorável:

<Package xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 
         xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
         xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" 
         xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
         IgnorableNamespaces="uap uap2 uap5 mp"
         xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

Em seguida, especifique o "MixedRealityModel" no mosaico predefinido da sua aplicação:

<Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="ExampleApp.App">
      <uap:VisualElements
        DisplayName="ExampleApp"
        Square150x150Logo="Assets\Logo.png"
        Square44x44Logo="Assets\SmallLogo.png"
        Description="ExampleApp"
        BackgroundColor="#464646">
        <uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" >
          <uap5:MixedRealityModel Path="Assets\My3DTile.glb" />
        </uap:DefaultTile>
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
    </Application>
</Applications>

O elemento MixedRealityModel aceita um caminho de ficheiro que aponta para um recurso 3D armazenado no pacote de aplicações. Atualmente, apenas os modelos 3D fornecidos com o formato de ficheiro .glb e criados com base nas instruções de criação de recursos 3D Windows Mixed Reality são suportados. Os recursos têm de ser armazenados no pacote de aplicações e a animação não é atualmente suportada. Se o parâmetro "Caminho" for deixado em branco, o Windows mostrará o ardósia 2D em vez do iniciador 3D. Nota: o recurso .glb tem de ser marcado como "Conteúdo" nas definições de compilação antes de criar e executar a sua aplicação.

Selecione o .glb no explorador de soluções e utilize a secção de propriedades para marcá-lo como
Selecione o .glb no explorador de soluções e utilize a secção de propriedades para marcá-lo como "Conteúdo" nas definições de compilação

Caixa delimitadora

Uma caixa delimitadora pode ser utilizada para adicionar opcionalmente uma região de memória intermédia extra à volta do objeto. A caixa delimitadora é especificada através de um ponto central e extensões, que indicam a distância entre o centro da caixa delimitadora e as margens ao longo de cada eixo. As unidades da caixa delimitadora podem ser mapeadas para 1 unidade = 1 metro. Se não for fornecida uma caixa delimitadora, uma será automaticamente ajustada à malha do objeto. Se a caixa delimitadora fornecida for mais pequena do que o modelo, será redimensionada para se ajustar à malha.

O suporte para o atributo de caixa delimitadora será fornecido com a atualização do Windows RS4 como uma propriedade no elemento MixedRealityModel. Para definir primeiro uma caixa delimitadora na parte superior do manifesto da aplicação, adicione o esquema uap6 e inclua-o como espaços de nomes ignoráveis:

<Package xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 
         xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
         xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" 
         xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
         xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6"
         IgnorableNamespaces="uap uap2 uap5 uap6 mp"
         xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

Em seguida, no MixedRealityModel, defina a propriedade SpatialBoundingBox para definir a caixa delimitadora:

        <uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" >
          <uap5:MixedRealityModel Path="Assets\My3DTile.glb">
              <uap6:SpatialBoundingBox  Center=”1,-2,3” Extents=”1,2,3” />
          </uap5:MixedRealityModel>
        </uap:DefaultTile>

Utilizar o Unity

Ao trabalhar com o Unity, o projeto tem de ser criado e aberto no Visual Studio para que o Manifesto da Aplicação possa ser editado.

Nota

O iniciador 3D tem de ser redefinido no manifesto ao criar e implementar uma nova solução do Visual Studio a partir do Unity.

Nota

Esta funcionalidade foi adicionada como parte do Fall Creators Update (RS3) de 2017 para headsets envolventes (VR) e como parte da Atualização de Abril de 2018 (RS4) para HoloLens. Certifique-se de que a sua aplicação tem como destino uma versão do Windows SDK superior ou igual a 10.0.16299 em headsets envolventes (VR) e 10.0.17125 no HoloLens. Pode encontrar o SDK do Windows mais recente aqui.

Importante

As ligações avançadas 3D (secondaryTiles) só funcionam com aplicações UWP 2D. No entanto, pode criar um iniciador de aplicações 3D para iniciar uma aplicação exclusiva a partir do Windows Mixed Reality home page.

As suas aplicações 2D podem ser melhoradas para Windows Mixed Reality ao adicionar a capacidade de colocar modelos 3D da sua aplicação no Windows Mixed Reality base como ligações avançadas para conteúdos na sua aplicação 2D, tal como os mosaicos secundários 2D no menu Iniciar do Windows. Por exemplo, pode criar fotospheres de 360° que se ligam diretamente a uma aplicação de visualizador de fotografias de 360° ou permitir que os utilizadores coloquem conteúdo 3D a partir de uma coleção de recursos que abre uma página de detalhes sobre o autor. Estas são apenas algumas formas de expandir a funcionalidade da sua aplicação 2D com conteúdo 3D.

Criar um "secondaryTile" 3D

Pode colocar conteúdo 3D a partir da sua aplicação com "secondaryTiles" ao definir um modelo de realidade mista no momento da criação. Os modelos de realidade mista são criados ao referenciar um recurso 3D no pacote de aplicações e, opcionalmente, definir uma caixa delimitadora.

Nota

A criação de "secondaryTiles" a partir de uma vista exclusiva não é atualmente suportada.

using Windows.UI.StartScreen;
using Windows.Foundation.Numerics;
using Windows.Perception.Spatial;

// Initialize the tile
SecondaryTile tile = new SecondaryTile("myTileId")
{
    DisplayName = "My Tile",
    Arguments = "myArgs"
};

tile.VisualElements.Square150x150Logo = new Uri("ms-appx:///Assets/MyTile/Square150x150Logo.png");

//Assign 3D model (only ms-appx and ms-appdata are allowed)
TileMixedRealityModel model = tile.VisualElements.MixedRealityModel;
model.Uri = new Uri("ms-appx:///Assets/MyTile/MixedRealityModel.glb");
model.ActivationBehavior = TileMixedRealityModelActivationBehavior.Default;
model.BoundingBox = new SpatialBoundingBox
{
    Center = new Vector3 { X = 1, Y = 0, Z = 0 },
    Extents = new Vector3 { X = 3, Y = 5, Z = 4 }
};

// And place it
await tile.RequestCreateAsync();

Caixa delimitadora

Uma caixa delimitadora pode ser utilizada para adicionar uma região de memória intermédia extra à volta do objeto. A caixa delimitadora é especificada através de um ponto central e extensões, que indicam a distância entre o centro da caixa delimitadora e as margens ao longo de cada eixo. As unidades da caixa delimitadora podem ser mapeadas para 1 unidade = 1 metro. Se não for fornecida uma caixa delimitadora, uma será automaticamente ajustada à malha do objeto. Se a caixa delimitadora fornecida for mais pequena do que o modelo, será redimensionada para se ajustar à malha.

Comportamento de ativação

Nota

Esta funcionalidade será suportada a partir da atualização do Windows RS4. Certifique-se de que a sua aplicação tem como destino uma versão do Windows SDK superior ou igual a 10.0.17125 se planear utilizar esta funcionalidade

Pode definir o comportamento de ativação de um 3D secundárioTile para controlar a forma como reage quando um utilizador o seleciona. Isto pode ser utilizado para colocar objetos 3D na base Mixed Reality que são puramente informativos ou decorativos. São suportados os seguintes tipos de comportamento de ativação:

  1. Predefinição: quando um utilizador seleciona a secundária 3DTile a aplicação é ativada
  2. Nenhum: quando o utilizador seleciona a secundária 3DSe nada acontece e a aplicação não é ativada.

Obter e atualizar um "secondaryTile" existente

Os programadores podem obter uma lista dos mosaicos secundários existentes, que inclui as propriedades que especificaram anteriormente. Também podem atualizar as propriedades ao alterar o valor e, em seguida, chamar UpdateAsync().

// Grab the existing secondary tile
SecondaryTile tile = (await SecondaryTile.FindAllAsync()).First();

Uri updatedUri = new Uri("ms-appdata:///local/MixedRealityUpdated.glb");

// See if the model needs updating
if (!tile.VisualElements.MixedRealityModel.Uri.Equals(updatedUri))
{
    // Update it
    tile.VisualElements.MixedRealityModel.Uri = updatedUri;

    // And apply the changes
    await tile.UpdateAsync();
}

Verificar se o utilizador está no Windows Mixed Reality

As ligações avançadas 3D (secondaryTiles) só podem ser criadas enquanto a vista estiver a ser apresentada num headset Windows Mixed Reality. Quando a sua vista não estiver a ser apresentada num headset Windows Mixed Reality, recomendamos que o faça corretamente ao ocultar o ponto de entrada ou ao apresentar uma mensagem de erro. Pode verificar esta situação ao consultar IsCurrentViewPresentedOnHolographic().

Notificações de mosaico

Atualmente, as notificações de mosaico não suportam o envio de uma atualização com um recurso 3D. Isto significa que os programadores não podem fazer o seguinte:

  • Notificações Push
  • Consulta Periódica
  • Notificações Agendadas

Para obter mais informações sobre as funcionalidades e atributos de outros mosaicos e como são utilizados para mosaicos 2D, veja a documentação Mosaicos para Aplicações UWP.

Ver também