Lazaro Fernandes Lima Suleiman

Lazaro Fernandes Lima Suleiman

head of technology at @Hondana

Hololens e o novo HoloToolkit

Ao iniciar o desenvolvimento de apps holográficas no Microsoft Hololens utilizando o Unity, muitos scripts relacionados a Scripting API da plataforma e cálculos matemáticos diversos são necessários para que os desenvolvedores criem gestos e incorporem ações aos hologramas, conforme podemos acompanhar no Holographic Academy.

Visando abstrair parte da complexidade e padronizar a implementação das principais ações que um holograma suporta a Microsoft criou o HoloToolkit-Unity, projeto open source disponível no github que oferece aos desenvolvedores um conjunto de scripts, materiais e prefabs (componentes pré-fabricados) com o objetivo de acelerar o desenvolvimento de apps holográficas no Unity. Este projeto é parte efetiva do já existente HoloToolkit mas possui componentes exclusivos para a plataforma Unity.

O objetivo deste post será apresentar a nova versão do HoloToolkit-Unity, lançada no dia 10/01/2017, indo um pouco mais a fundo no desenvolvimento de apps holográficas. Se este é o seu primeiro contato com o desenvolvimento para Hololens confira o primeiro post desta série.

Obtendo o HoloToolkit

Anteriormente, era necessário baixar todo o projeto do HoloToolkit-Unity no github, diretamente da branch principal e através do Unity realizar um export package, não existiam releases, hoje o projeto já possui uma área com as últimas releases e já estamos na segunda versão.

Estaremos utilizando a versão 1.5.5.0 do HoloToolkit lançada no dia 10/01/2017 e a versão 5.6.0b5 do Unity, basta baixar através dos links abaixo:

As novas versões do HoloToolkit-Unity não serão mais compatíveis com versões anteriores do Unity Technical Preview, como no post anterior, logo, é necessário utilizar a versão 5.6.0b3 do Unity ou superior.

O novo módulo de Input

Nesta nova versão do HoloToolkit todo o módulo de Input foi redesenhado, visando extensibilidade e performance. Vale a pena conferir a issue #277 que motivou toda a mudança diretamente no repositório do projeto.

Em resumo, quando adicionamos o prefab InputManager do HoloToolkit à cena principal habilitamos todo o sistema de input handle, permitindo interações com gestos e comandos de voz. E para ativar estes eventos basta criarmos scripts que implementem interfaces fornecidas pelo HoloToolkit, veja abaixo as interfaces disponíveis.

Neste post vamos desenvolver uma app contendo um holograma o qual iremos adicionar comportamentos de click e de hover implementando as interfaces IFocusable e IInputClickHandler, desta forma, basta implementar os métodos abaixo e associar o script ao holograma desejado.

Para exemplificar, vamos desenvolver uma pequena app que altere a cor de um holograma quando estivermos em foco e adicione um comportamento de rotação ao clicar sobre o holograma.

O projeto pode ser baixado no github.

Importando o HoloToolkit para o seu projeto Unity

Após criar um novo projeto, remova a Main Camera e o Directional Lights localizados na aba Hierarchy. Iremos utilizar componentes já configurados a partir do HoloToolkit.

Em seguida, importe o arquivo HoloToolkit-Unity-v1.5.5.0.unitypackage através do menu Assets > Import Package > Custom Package....

Após finalizar a importação, a pasta HoloToolkit será exibida dentro de Assets e o Unity receberá um novo item de menu chamado HoloToolkit, o qual utilizaremos ao final do post para nos ajudar a realizar o deploy da app, veja abaixo.

holotoolkit importado

Preparando a Cena com o auxilio do HoloToolkit

No post anterior configuramos a câmera e as configurações de build manualmente, contudo, o HoloToolkit já nos fornece opções para automizar esse processo inicial.

Adicione os prefabs HoloLensCamera, DefaultCursor e o já citado InputManager. Basta realizar uma pesquisa por estes componentes no Unity e arrastá-los para a raiz do painel Hierarchy.

O HololensCamera possui as configurações padrões que utilizamos para o objeto de câmera no primeiro post, nada de mais até aqui.

O DefaultCursor é um prefab que exibe um ponto branco na tela e aumenta o seu tamanho quando esta sobre um holograma, utilizaremos este cursor em nosso projeto de exemplo.

Crie um GameObject e em seguida insira um Cube dentro dele.

Neste momento, o InputManager já esta gerenciando eventos e nosso cursor já esta disponível na interface quando rodamos a aplicação a partir do Unity.

Implementando comportamentos ao holograma

Teremos neste exemplo um script único que gerencia tanto o comportamento de click quanto o de focus, para isso, crie um script em C# com o nome HologramBehaviours e associe este script ao cubo.

O script acima rotaciona o objeto quando a ação de click é disparada, altera a cor do objeto em foco para vermelho e restaura a cor quando sai de foco.

##Suporte a gesto de movimentação

Para darmos mais interatividade ao nosso app podemos utilizar o script HandDraggable.cs do HoloToolkit o qual possui toda a implementação necessária para realizar a movimentação de um objeto pelo ambiente através do gesto de arrastar e soltar.

Para adicionar esse suporte basta arrastar o script HandDraggable.cs para o objeto Cubo.

O script está localizado em:

Build e Deploy

Configurar o Project Settings e as Capabilities Settings é um processo que fazíamos de forma manual.
Para acelerar o processo de configuração da build o HoloToolkit habilita no menu principal do Unity opções para nos ajudar neste processo.

Confira abaixo os passos para realizar as configurações necessárias de build para a nossa app a partir do menu principal:

Neste momento, o projeto foi exportado para um projeto UWP, o próximo passo é abrir a solution e realizar o deploy para o dispositivo ou para o emulador. Abra o projeto gerado utilizando o caminho abaixo:

Altere a plataforma de ARM para x86 e selecione o Hololens Emulator ou Remote Machine caso possua o dispositivo.

Agora basta rodar a aplicação sem modo de debug através de Ctrl + F5.

Para finalizar, preparei um vídeo onde mostro na visão do Hololens o resultado final desse exemplo.

Baixe o projeto no github.

É isso pessoal, em breve maiores novidades.

Lazaro.

Comments