Desenvolvimento

23 fev, 2017

Hololens e o novo HoloToolkit

Publicidade

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:

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.

Baixe o projeto no GitHub.

,É 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