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.

  • IFocusable
  • IHoldHandle
  • IInputHandler
  • IInputClickHandler
  • IManipulationHandler
  • INavigationnHandler
  • ISourceStateHandler
  • ISpeechHandler

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.

  • 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 post para nos ajudar a realizar o deploy da app, veja abaixo.

HoloToolkit importado para o Unity

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 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.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,
Lazaro.

(Cross-post de http://lazarofl.github.io/2017/02/06/Hololens-e-o-novo-holotoolkit/)