#Hololens – Detect user hand interactions using #HoloToolkit (update!)

Hello!

During the last few months HoloToolkit has changed a lot. These changes make some of the examples that I have written as non-valid posts. In today’s post, I’ll quickly explain how to implement detection of hands with the current version of HoloToolkit.

We start with the basics with these steps

 

  1. Create a 3D project in Unity3D
  2. Configure project to support HoloLens projects
  3. Clean Scene elements
  4. Import HoloToolkit package
  5. Add
    1. HololensCamera
    2. SpatialMapping
    3. CursorWithFeedback
  6. Add Empty element, Managers
    1. Add existing scripts
      1. Gaze Managers
      2. Gaze Stabilizer
      3. Input Manager
  7. Add Empty element, HoloCollection
    1. Add 3D elements
      1. Cube
        1. Position, x:0 y:0 z:2
        2. Rotation, x:0 y:0 z:0
        3. Scale, x:0.3 y:0.3 z:0.3
      2. AnchorText (from HoloToolkit)
        1. Position, x:0 y:0.35 z:2
        2. Rotation, x:0 y:0 z:0
        3. Scale, x:0.3 y:0.3 z:0.3
  8. Into the Manager collection
    1. Add script Text Debug Manager (later on the post)
      1. Drag the Anchor Text (7.1.2) into the Anchor Debug Text Property

This is the process creating a basic Hololens project. Now let’s create a script that detects any of the user actions with his hands. This script will display these actions in the AnchorText which I have added to the collection of holograms in debug mode.

For this example, I will call the script “TextDebugManager.cs“. The same code is as follows

 

using HoloToolkit.Unity.InputModule;
using UnityEngine;

public class TextDebugManager : MonoBehaviour, IHoldHandler, IInputHandler
{

 public TextMesh AnchorDebugText;
 private string _debugTextHold = "";
 private string _debugTextInput = "";
 
 void Update()
 {
   UpdateText();
 }

 private void UpdateText()
 {
   if (AnchorDebugText != null)
     AnchorDebugText.text = string.Format(
       "Hold: {0}\nInput: {1}", _debugTextHold, _debugTextInput);
 }

 public void OnHoldStarted(HoldEventData eventData)
 {
   _debugTextHold = "OnHoldStarted";
 }

 public void OnHoldCompleted(HoldEventData eventData)
 {
   _debugTextHold = "OnHoldCompleted";
 }

 public void OnHoldCanceled(HoldEventData eventData)
 {
   _debugTextHold = "OnHoldCanceled";
 }

 public void OnInputUp(InputEventData eventData)
 {
   _debugTextInput = "OnInputUp";
 }

 public void OnInputDown(InputEventData eventData)
 {
   _debugTextInput = "OnInputDown";
 }
}

Within the class I implemented interfaces “IHoldHandle” and “IInputHandler“. Then be shown the operations be interfaces in the Update() of the script. In this way, we can implement a model of Debug PPP of Hololens in a quick way, and in this case, to capture the interactions of the user about the holograms.

Greetings @ TorontoEl Bruno

References

#Hololens – Detectando interacciones con las manos utilizando #HoloToolkit (actualización!)

Hola !
Durante estos ultimos meses HoloToolkit ha cambiado mucho. Estos cambios hacen que algunos de los ejemplos que he escrito ya no sean válidos. En el post de hoy, explicaré rápidamente como implementar la detección de manos con la versión actual de HoloToolkit.

Hola !

Durante estos ultimos meses HoloToolkit ha cambiado mucho. Estos cambios hacen que algunos de los ejemplos que he escrito ya no sean válidos. En el post de hoy, explicaré rápidamente como implementar la detección de manos con la versión actual de HoloToolkit.

Empezamos por lo básico con los siguientes pasos

  1. Create a 3D project in Unity3D
  2. Configure project to support HoloLens projects
  3. Clean Scene elements
  4. Import HoloToolkit package
  5. Add
    1. HololensCamera
    2. SpatialMapping
    3. CursorWithFeedback
  6. Add Empty element, Managers
    1. Add existing scripts
      1. Gaze Managers
      2. Gaze Stabilizer
      3. Input Manager
  7. Add Empty element, HoloCollection
    1. Add 3D elements
      1. Cube
        1. Position, x:0 y:0 z:2
        2. Rotation, x:0 y:0 z:0
        3. Scale, x:0.3 y:0.3 z:0.3
      2. AnchorText (from HoloToolkit)
        1. Position, x:0 y:0.35 z:2
        2. Rotation, x:0 y:0 z:0
        3. Scale, x:0.3 y:0.3 z:0.3
  8. Into the Manager collection
    1. Add script Text Debug Manager (later on the post)
      1. Drag the Anchor Text (7.1.2) into the Anchor Debug Text Property

Este es el proceso básico de creación de un proyecto de Hololens, lo que haremos ahora es crear un script que detecte alguna de las acciones con las manos del usuario de Hololens. Este script mostrará en modo debug estas acciones en el AnchorText que he agregado a la colección de Hologramas.

Para este ejemplo llamaré al script “TextDebugManager.cs“. El código del mismo es el siguiente

using HoloToolkit.Unity.InputModule;
using UnityEngine;

public class TextDebugManager : MonoBehaviour, IHoldHandler, IInputHandler
{

 public TextMesh AnchorDebugText;
 private string _debugTextHold = "";
 private string _debugTextInput = "";
 
 void Update()
 {
   UpdateText();
 }

 private void UpdateText()
 {
   if (AnchorDebugText != null)
     AnchorDebugText.text = string.Format(
       "Hold: {0}\nInput: {1}", _debugTextHold, _debugTextInput);
 }

 public void OnHoldStarted(HoldEventData eventData)
 {
   _debugTextHold = "OnHoldStarted";
 }

 public void OnHoldCompleted(HoldEventData eventData)
 {
   _debugTextHold = "OnHoldCompleted";
 }

 public void OnHoldCanceled(HoldEventData eventData)
 {
   _debugTextHold = "OnHoldCanceled";
 }

 public void OnInputUp(InputEventData eventData)
 {
   _debugTextInput = "OnInputUp";
 }

 public void OnInputDown(InputEventData eventData)
 {
   _debugTextInput = "OnInputDown";
 }
}

Dentro de la clase he implementado las interfaces “IHoldHandle“ e “IInputHandler“.  Luego se muetran las operaciones de estar interfaces en el Update() del script. De esta forma, podemos implementar un modelo de Debug en una app de Hololens de una forma rápida, y en este caso, para capturar las interacciones del usuario sobre los Hologramas.

Saludos @ Toronto

El Bruno

References

#Hololens – How to detect AirTap and Click actions using #HoloToolkit (updated!)

Hola ! Ayer comenté como conectar un mando de XBoxOne a las Hololens, hoy veamos un poco de código para interactuar con el mismo. El ejemplo es simple Una vez agregada la capacidad de Spatial Mapping en el proyecto, activaremos la visualización de Mesh cuando se presione el botón A del mando de XBoxOne Por ejemplo: Empezamos por […]

Hello!

During the last few months, HoloToolkit has evolved a lot. Some of the changes in the Toolkit make some of my blog samples as non-valid. For example, basic actions such as detecting an AirTap. In today’s post, I’ll quickly explain how to implement the AirTap or Click.

We start with the basics with these steps

  • Create a 3D project in Unity3D
  • Configure project to support HoloLens projects
  • Clean Scene elements
  • Import HoloToolkit package
  • Add
    • HololensCamera
    • SpatialMapping
    • CursorWithFeedback
  • Add Empty element, Managers
    • Add existing scripts
      • Gaze Managers
      • Gaze Stabilizer
      • Input Manager
  • Add Empty element, HoloCollection
    • Add 3D elements
      • Cube
        • Position, x:0 y:0 z:2
        • Rotation, x:0 y:0 z:0
        • Scale, x:0.3 y:0.3 z:0.3

This is the basic process to create a Hololens project in Unity3D.  Now let’s associate a script to the Cube that detects some user actions of the user, such as for example the AirTap. For this example, I will call the script “CubeManager.cs“. This is the source code of the script:

using HoloToolkit.Unity.InputModule;
using UnityEngine;

public class CubeManager : MonoBehaviour, IInputClickHandler, IInputHandler
{
  public void OnInputClicked(InputClickedEventData eventData)
  {
    // AirTap code goes here
  }
  public void OnInputDown(InputEventData eventData)
  { }
  public void OnInputUp(InputEventData eventData)
  { }
}

To capture AirTaps actions, we need to implement the “IInputClickHandler” interface. In the OnInputClicked(InputClickedEventData eventData) method we can perform actions when the user AirTap on the element. In the same way, if we implement the interface “IInputHandler” we can capture events “Click/Tap Down” and “Click/Tap Up” in an element of our app.

Note: Besides the AirTap action, this example serves to Click action on the Hololens clicker.

IMHO, I find it a much more ‘clean’ way this way of working with events using interfaces. Although there is still a way to go. In my next post, I will show how to work with hands and Hololens, for this sample the approach is not interface driven.

The sample code can be downloaded from GitHub (link)

Greetings @ Toronto

El Bruno

References

#Hololens – Detectando acciones de AirTap y Click con #HoloToolkit (actualización!)

Hola ! Ayer comenté como conectar un mando de XBoxOne a las Hololens, hoy veamos un poco de código para interactuar con el mismo. El ejemplo es simple Una vez agregada la capacidad de Spatial Mapping en el proyecto, activaremos la visualización de Mesh cuando se presione el botón A del mando de XBoxOne Por ejemplo: Empezamos por […]

Hola !

Durante estos ultimos meses HoloToolkit ha cambiado mucho. Estos cambios hacen que algunos de los ejemplos que he escrito ya no sean válidos. Por ejemplo, acciones básicas como detectar un AirTap. En el post de hoy, explicaré rápidamente como implementar el AirTap o Click.

Empezamos por lo básico con los siguientes pasos

  • Create a 3D project in Unity3D
  • Configure project to support HoloLens projects
  • Clean Scene elements
  • Import HoloToolkit package
  • Add
    • HololensCamera
    • SpatialMapping
    • CursorWithFeedback
  • Add Empty element, Managers
    • Add existing scripts
      • Gaze Managers
      • Gaze Stabilizer
      • Input Manager
  • Add Empty element, HoloCollection
    • Add 3D elements
      • Cube
        • Position, x:0 y:0 z:2
        • Rotation, x:0 y:0 z:0
        • Scale, x:0.3 y:0.3 z:0.3

Este es el proceso básico de creación de un proyecto de Hololens, lo que haremos ahora es asociar un script al cubo que detecte algunas acciones del usuario, como por ejemplo el AirTap. Para este ejemplo llamaré al script “CubeManager.cs“. El código del mismo es el siguiente

using HoloToolkit.Unity.InputModule;
using UnityEngine;

public class CubeManager : MonoBehaviour, IInputClickHandler, IInputHandler
{
  public void OnInputClicked(InputClickedEventData eventData)
  {
    // AirTap code goes here
  }
  public void OnInputDown(InputEventData eventData)
  { }
  public void OnInputUp(InputEventData eventData)
  { }
}

Como podemos ver la forma de capturar AirTaps, es implementando la interfaz “IInputClickHandler“. En el método  OnInputClicked(InputClickedEventData eventData) podremos realizar acciones cuando el usuario haga AirTap sobre el cubo. De la misma forma si implementamos la interfaz “IInputHandler” podremos capturar los eventos “Click/Tap Down” y “Click/Tap Up” en un elemento de nuestra app.

Nota: Además de la acción AirTap, este ejemplo sirve para la acción de Click en el clicker de Hololens.

Personalmente me parece una forma mucho más “limpia” esta forma de trabajar con eventos utilizando interfaces. Aunque todavía hay camino para andar. En el siguiente post veremos como trabajar con las manos, ya que el enfoque no es orientado a interfaces.

El código de ejemplo se puede descargar desde GitHub (link)

Saludos @ Toronto

El Bruno

References

#Hololens – New emulation features with HoloLensCamera in #HoloToolkit

Hello!

Today is also a quick post day. Yesterday I spend some time to learn some new features of the HoloToolkit, and I realiced that the new HoloLensCamera has some very interesting features when we use the “emulation mode” in Unity3D. It allows us to perform navigation and interaction actions in a very simple way using keyboard and mouse.

2017-01-23-holo-camera

The previous animation shows how we can move an object using the keyboard navigation buttons and also we can use keys using the Shift key and the mouse to emulate the interaction of a hand doing an AirTap.

If we see a HoloLensCamera inspector, we can see in the same properties, the script ManualGazeControl is in charge of processing all these movements.

clipboard02

The option of working with a Joystick comes disabled by default, I’ve tried it with a XboxOne controller and it works fine. The code on the manager script is fairly self-explanatory.

In the method Update() of the class, according to the State of the keyboard, mouse and finally of the joystick, the position is processed. Then with the values of X and Z, the emulator moves the camera to the right place.

 

Clipboard04.jpg

Except that need some functionality that requires debugging C#, this is another reason not to use the emulator from Visual Studio 2017!

Greetings @ Toronto

El Bruno

References

#Hololens – Nuevas funcionalidades para emulación de HoloLensCamera en #HoloToolkit

Hola !

Hoy también es post rápido. Ayer después de ponerme al día con algunas novedades del HoloToolkit, me dí cuenta que la nueva HoloLensCamera posee unas funcionalidades muy interesantes cuando usamos el modo “emulación” dentro de Unity3D. La misma nos permite realizar acciones de navegación e interacción de una forma muy simple utilizando teclado y mouse.

2017-01-23-holo-camera

La animación anterior muestra como podemos movernos frente a un objecto utilizando las teclas de navegación y como además utilizando el mouse y la tecla Shift podemos emular la interacción de una mano o inclusive un AirTap.

Si vemos el inspector de un HoloLensCamera, podemos ver en las propiedades del mismo, que el script ManualGazeControl se encarga de procesar todos estos movimientos.

clipboard02

La opción de trabajar con un Joystick viene deshabilitada por defecto, lo he probado con un mando de XboxOne y también funciona perfecto. La verdad que luego el código del script es bastante auto explicativo.

En el método Update() de la clase, de acuerdo al estado true o false, se procesa el estado del teclado, luego del mouse y finalmente del joystick. Luego con los valores de X, Y y Z se mueve la camera al sitio indicado.

Clipboard04.jpg

Salvo que necesitemos alguna funcionalidad que requiera depurar C#, este es otro motivo más para no utilizar el emulador desde Visual Studio 2017 !

Saludos @ Toronto

El Bruno

References

#Hololens – About #HoloToolkit updates and how to find which assets are necessary we need to use

Hello!

Monday quick post while I’m preparing a test environment/demo for Office 365. A few days ago Ridley told me that my examples on “How to place a Hologram using AirTap” had some syntax errors since classes like GestureManager and HandsManager no longer exist in HoloToolkit.

Indeed, on this, I already wrote some time ago. On the need to manually create and update the HoloToolkit package, if we want to use any of its new features. The best way to do this is on this post, “Hololens – This is the right way to work with #Unity packages and HoloToolkit“.

I have to admit, while I frequently upgrade the main projects in which I am working, the examples that come with the posts are “in a vacuum”. But it seems I´m not the only one (which is no good at all!), you can also face something similar on the Holographic Academy Tutorials (link). Most of these tutorials are based on an old HoloToolkit version and many of the assets that are used there no longer exist today. They are in fact different, have been separated in several assets or have been included in other.

The best way to see that scripts are now necessary is as follows. For example, on a project already set up for Hololens in Unity3D with the latest version of HoloToolkit, we can see one of the sample scenes to understand what happens in the asset/source code world. In this case, I choose “ManualCameraControl”.

clipboard04

In this I see some new features..

  • The Camera object is now called “HololensCamera”
  • Within “Managers // InputManager” we can see the scene use several scripts, including one called “InputManager”
  • The code of this script let me clear that it refers to “GazeManager” and in GazeManager.cs I also meet some surprises

So this is the main I learn to work with HoloToolkit. I know is not the best way (maybe?), but it works for me. If for example, we go to the HoloToolkit Wiki (link) we will see that these docs update date is June 2016, so we best skip them and

READ THE TOOLKIT SOURCE CODE, THIS WILL HELP YOU UNDERSTAND HOW THIS ASSETS WORKS ON THE INSIDE

 

It is always good to have an excuse to read source code 😀

Greetings @ Toronto

El Bruno

References

#Hololens – Sobre los updates en HoloToolkit y como ver que assets son los necesarios

Hola !

Post rápido de lunes mientras sigo preparando un entorno de pruebas / demo con Office 365. Hace unos días Ridley me comentaba que mis ejemplos sobre “How to place an Hologram using AirTap” tenían algunos errores de sintaxis, ya que las clases GestureManager y HandsManager no existen más en HoloToolkit.

Efectivamente, sobre esto ya hablé alguna vez. Sobre la necesidad de crear y actualizar “a mano” el package de HoloToolkit si queremos utilizar alguna de sus funcionalidades nuevas. La mejor forma de hacerlo la escribí en un post, “Hololens – This is the right way to work with #Unity packages and HoloToolkit“.

Debo reconocer que, si bien actualizo los proyectos principales en los que trabajo, los ejemplos que acompañan a los posts quedan “en el vacío”. Un claro ejemplo de esto, lo podemos ver cuando hacemos los tutoriales de Holographic Academy (link). La mayoría de estos tutoriales, se basan en una versión muy vieja de HoloToolkit y muchos de los assets que se utilizan allí, hoy ya no existen. En realidad se llaman diferente, se han separado en varios assets o se han incluido en otros.

La mejor forma de ver que scripts son los necesarios ahora es la siguiente. Por ejemplo, con un proyecto configurado para Hololens en Unity3D con la última versión de HoloToolkit, podemos ver una de las escenas de ejemplo para ver que se utilizan en las mismas. En este caso elijo “ManualCameraControl”.

clipboard04

En la misma veo algunas novedades.

  • El objecto Camera ahora se llama “HololensCamera”
  • Dentro de “Managers // InputManager” puedo ver que se utilizan varios scripts, entre ellos uno llamado “InputManager”
  • El código de este script me deja claro que el mismo hace referencia a “GazeManager” y dentro de GazeManager.cs también me encuentro con algunas sorpresas

Pues bien, así me he acostumbrado a trabajar con HoloToolkit. Se que no es la mejor forma, sin embargo resulta. Si por ejemplo, nos vamos al Wiki de HoloToolkit (link) veremos que la fecha de actualización de estos docs es de Junio del 2016, con lo mejor saltearlos y

LEER EL CÓDIGO FUENTE DEL TOOLKIT NOS AYUDARÁ A COMPRENDER COMO FUNCIONA EL MISMO POR DENTRO

Siempre es bueno tener una excusa para leer source code 😀

Saludos @ Toronto

El Bruno

References

#Hololens – HoloToolkit update for #Unity3D 5.5 on December

Hello!

A fast post today, this week was a busy one so I had not time to work on my personal projects. And today is a response to a private question I have a couple of days ago related to the integration of Hololens, HoloToolkit and the new version of Unity 5.5.

The response official can be found in the Hololens forums (link)

clipboard03

And if want to know more about what contains the beta of Unity 5.5, read here (link).The last version that I tested (5.5. 0f1) works well with Hololens projects, however, on previous versions, a couple of them were not very Hololens friendly. Remember that the version that we downloaded to them projects of Hololens also is based in the Beta 5.5, but is it version [5.4. 0f1-HTP].

clipboard05

Resumen

  • You can use Unity 5.5. 0f1 to create Hololens apps
  • In the week of the 05-Dec is updated HoloToolkit to this version

Greetings @ Toronto

El Bruno

#Hololens – Integración con #Unity3D 5.5 en Diciembre

Hola !

Posr rápido de viernes que esta semana no he tenido tiempo de avanzar en mis proyectos personales. Y hoy es una respuesta a una pregunta que me hicieron en privado hace un par de días relacionado a la integración de Hololens, HoloToolkit y la nueva versión de Unity 5.5.

La respuesta oficial la podemos encontrar en los foros de Hololens (link)

clipboard03

Y si quieres saber más sobre lo que contiene la beta de Unity 5.5, lo puedes leer aquí (link). La última versión que he probado (5.5.0f1) funciona bien con los proyectos para Hololens, pero en el camino hubo un par que no eran muy estables. Recordemos que la versión que nos descargamos para los proyectos de Hololens también está basada en la Beta 5.5, pero es la versión [5.4.0f1-HTP].

clipboard05

En conclusión

  • Se puede utilizar Unity 5.5.0f1 para crear Hololens apps
  • En la semana del 05-Dec se actualizará HoloToolkit a esta versión

Saludos @ Toronto

El Bruno