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 artigo 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 artigo 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. Na época não existiam releases, mas hoje o projeto já possui uma área com os últimos 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:
- https://github.com/Microsoft/HoloToolkit-Unity/releases/tag/v1.5.5.0
- https://unity3d.com/unity/beta/unity5.6.0b5
As novas versões do HoloToolkit-Unity não serão mais compatíveis com versões anteriores do Unity Technical Preview, como no artigo 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.
- IFocusable;
- IHoldHandle;
- IInputHandler;
- IInputClickHandler;
- IManipulationHandler;
- INavigationnHandler;
- ISourceStateHandler;
- ISpeechHandler.
Neste artigo, 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.
- void OnFocusEnter();
- void OnFocusExit();
- void OnInputClicked(InputEventData eventData).
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 novoprojeto, 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 artigo para nos ajudar a realizar o deploy da app. Veja abaixo.
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 automatizar 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 artigo, nada de mais até aqui.
O DefaultCursor é um prefab que exibe um ponto branco na tela e aumenta o seu tamanho quando está 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á está 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.cs e associe este script ao cubo.
using HoloToolkit.Unity.InputModule; using UnityEngine; public class HologramBehaviors : MonoBehaviour, IFocusable, IInputClickHandler { [SerializeField] public bool IsRotating = false; [SerializeField] public Color FocusedColor = Color.red; private Color OriginalColor; // Use this for initialization void Start() { this.OriginalColor = gameObject.GetComponent().material.color; } // Update is called once per frame void Update() { if (IsRotating) gameObject.transform.Rotate(1, 1, 1); } public void OnFocusEnter() { gameObject.GetComponent().material.color = FocusedColor; } public void OnFocusExit() { gameObject.GetComponent().material.color = OriginalColor; } public void OnInputClicked(InputEventData eventData) { IsRotating = !IsRotating; } }
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:
- Assets > HoloToolkit > Input > Scripts > Interactions > HandDraggable.cs
Build & 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:
- HoloToolkit > Configure > Apply Hololens Project Settings – Marque todas as opções e aplique;
- HoloToolkit > Configure > Apply Hololens Capability Settings – Marque a opção Spatial Perception e aplique;
- HoloToolkit > Build Window > Build Visual Studio SLN.
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:
- HoloToolkit > Build Window > Open SLN
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.
,É isso pessoal! Em breve maiores novidades.
Abraços!
***
Este artigo foi produzido em parceria com a Lambda3. Leia outros conteúdos no blog da empresa: blog.lambda3.com.br