HoloLens (1.ª generación) Entrada 210: Mirada

Importante

Los tutoriales Mixed Reality Academy se diseñaron con HoloLens (1.ª generación), Unity 2017 y Mixed Reality cascos envolventes en mente. Por lo tanto, creemos que es importante conservar estos tutoriales para los desarrolladores que sigan buscando instrucciones sobre el desarrollo para esos dispositivos. Estos tutoriales no se actualizarán con los conjuntos de herramientas o interacciones más recientes que se usan para HoloLens 2 y es posible que no sean compatibles con las versiones más recientes de Unity. Se mantendrán para que sigan funcionando en los dispositivos compatibles. Se ha publicado una nueva serie de tutoriales para HoloLens 2.

La mirada es la primera forma de entrada y revela la intención y el reconocimiento del usuario. Mr Input 210 (también conocido como Project Explorer) es un análisis profundo de los conceptos relacionados con la mirada para Windows Mixed Reality. Vamos a agregar reconocimiento contextual a nuestro cursor y hologramas, aprovechando al máximo lo que la aplicación sabe sobre la mirada del usuario.

Aquí tenemos un astronauta descriptivo que le ayudará a aprender los conceptos de mirada. En Mr Basics 101, teníamos un cursor simple que acaba de seguir la mirada. Hoy vamos a ir un paso más allá del cursor simple:

  • Vamos a hacer que el cursor y los hologramas se alo den cuenta: ambos cambiarán en función de dónde esté mirando el usuario o de dónde no lo esté buscando. Esto hace que tenga en cuenta el contexto.
  • Agregaremos comentarios a nuestro cursor y a los hologramas para proporcionar al usuario más contexto sobre lo que se va a dirigir. Estos comentarios pueden ser audio y objetos visuales.
  • Le mostraremos técnicas de destino para ayudar a los usuarios a alcanzar objetivos más pequeños.
  • Le mostraremos cómo atraer la atención del usuario a los hologramas con un indicador direccional.
  • Le enseñaremos técnicas para tomar los hologramas con el usuario a medida que se mueve por su mundo.

Importante

Los vídeos insertados en cada uno de los capítulos siguientes se grabaron con una versión anterior de Unity y el Mixed Reality Toolkit. Aunque las instrucciones paso a paso son precisas y actuales, es posible que vea scripts y objetos visuales en los vídeos correspondientes que no están actualizados. Los vídeos siguen estando incluidos para la posteridad y porque los conceptos tratados siguen siendo aplicables.

Compatibilidad con dispositivos

Curso HoloLens Cascos envolventes
Aspectos básicos de realidad mixta (210): Mirar ✔️ ✔️

Antes de empezar

Requisitos previos

Archivos de proyecto

  • Descargue los archivos requeridos por el proyecto. Requiere Unity 2017.2 o posterior.
  • Des archive los archivos en el escritorio u otra ubicación fácil de acceder.

Nota:

Si desea buscar en el código fuente antes de descargarlo, está disponible en GitHub.

Errata y notas

  • En Visual Studio, "Solo mi código" debe deshabilitarse (desactivado) en Herramientas- Opciones- Depuración para alcanzar puntos de interrupción >> en el código.

Capítulo 1: Configuración de Unity

Objetivos

  • Optimizar Unity para el desarrollo de HoloLens.
  • Importar recursos y configurar la escena.
  • Vea al astronauta en la HoloLens.

Instrucciones

  1. Inicie Unity.
  2. Seleccione Nuevo proyecto.
  3. Asigne al proyecto el nombre ModelExplorer.
  4. Escriba location (Ubicación) como la carpeta Gaze (Mirada) que des archivó anteriormente.
  5. Asegúrate de que el proyecto esté establecido en 3D (3D).
  6. Haga clic en Crear Project.

Configuración de Unity para HoloLens

Necesitamos que Unity sepa que la aplicación que estamos intentando exportar debe crear una vista inmersiva en lugar de una vista 2D. Para ello, agregamos HoloLens como un dispositivo de realidad virtual.

  1. Vaya a Editar Project Configuración > Player.
  2. En el panel Inspector para player Configuración, seleccione el icono Windows Store.
  3. Expanda el grupo XR Settings (Configuración de XR).
  4. En la sección Rendering (Representación), active la casilla Virtual Reality Supported (Se admite Virtual Reality) para agregar una nueva lista de SDK de Virtual Reality.
  5. Compruebe que Windows Mixed Reality (Mixed Reality de Windows) aparece en la lista. Si no es así, + seleccione el botón situado en la parte inferior de la lista y elija Windows +.

A continuación, es necesario establecer el back-end de scripting en .NET.

  1. Vaya a Editar Project Configuración > Player (puede que todavía lo tenga en el paso anterior).
  2. En el panel Inspector para player Configuración, seleccione el icono Windows Store.
  3. En la sección Otros Configuración configuración, asegúrese de que El back-end de scripting está establecido en .NET.

Por último, actualizaremos la configuración de calidad para lograr un rendimiento rápido en HoloLens.

  1. Vaya a Edit Project Configuración Quality (Editar Project Configuración > calidad).
  2. Haga clic en la flecha hacia abajo en la fila Predeterminada bajo el icono Windows Store.
  3. Seleccione Muy bajo para Windows Aplicaciones de la Tienda.

Importación de recursos de proyecto

  1. Haga clic con el botón derecho en la carpeta Activos Project panel.
  2. Haga clic en Import Package Custom Package (Importar paquete personalizado).
  3. Vaya a los archivos del proyecto que descargó y haga clic en ModelExplorer.unitypackage.
  4. Haga clic en Abrir.
  5. Una vez cargado el paquete, haga clic en el botón Importar.

Configuración de la escena

  1. En la jerarquía, elimine la cámara principal.
  2. En la carpeta HoloToolkit, abra la carpeta Entrada y, a continuación, abra la carpeta Prefabs.
  3. Arrastre y coloque el prefab MixedRealityCameraParent de la carpeta Prefabs en hierarchy.
  4. Haga clic con el botón derecho en la luz direccional en la jerarquía y seleccione Eliminar.
  5. En la Hologramas, arrastre y coloque los siguientes recursos en la raíz de la jerarquía:
    • AstroMan
    • Luces
    • SpaceAudioSource
    • SpaceBackground
  6. Inicie el modo de ▶ para ver al astronauta.
  7. Haga clic en Modo ▶ de nuevo para Detener.
  8. En la Hologramas, busque el recurso fitbox y arrástrelo a la raíz de la jerarquía.
  9. Seleccione fitbox en el panel Jerarquía.
  10. Arrastre la colección AstroMan de la jerarquía a la propiedad Colección de hologramas de Fitbox en el panel Inspector.

Guardar el proyecto

  1. Guarde la nueva escena: Guardar escena de archivo como.
  2. Haga clic en Nueva carpeta y asigne el nombre Scenes a la carpeta.
  3. Asigne al archivo el nombre"ModelExplorer"y guárdelo en la carpeta Scenes.

Compilar el proyecto

  1. En Unity, seleccione File Build Configuración.
  2. Haga clic en Agregar escenas abiertas para agregar la escena.
  3. Seleccione Universal Windows Platform en la lista Plataforma y haga clic en Cambiar plataforma.
  4. Si está desarrollando específicamente para HoloLens, establezca Dispositivo de destino en HoloLens. De lo contrario, déjelo en Cualquier dispositivo.
  5. Asegúrese de que Tipo de compilación está establecido en D3D y sdk está establecido en Instalado más reciente (que debe ser SDK 16299 o posterior).
  6. Haga clic en Generar.
  7. Cree una nueva carpeta denominada "App".
  8. Haga clic en la carpeta Aplicación.
  9. Presione Seleccionar carpeta.

Cuando unity haya terminado, aparecerá Explorador de archivos ventana.

  1. Abra la carpeta Aplicación.
  2. Abra la solución modelExplorer Visual Studio .

Si se implementa en HoloLens:

  1. Con la barra de herramientas superior Visual Studio, cambie el destino de Depurar a Versión y de ARM a x86.
  2. Haga clic en la flecha desplegable situada junto al botón Equipo local y seleccione Equipo remoto.
  3. Escriba la HoloLens IP del dispositivo y establezca Modo de autenticación en Universal (protocolo sin cifrar). Haga clic en Seleccionar. Si no conoce la dirección IP del dispositivo, busque en Configuración Opciones avanzadas de Internet de &> red.
  4. En la barra de menús superior, haga clic en Depurar - Iniciar sin depurar o presione Ctrl + F5. Si es la primera vez que se implementa en el dispositivo, deberá emparejar con Visual Studio.
  5. Cuando la aplicación se haya implementado, descarte fitbox con un gesto select.

Si se implementa en un casco envolvente:

  1. Con la barra de herramientas superior Visual Studio, cambie el destino de Depurar a Versión y de ARM a x64.
  2. Asegúrese de que el destino de implementación está establecido en Máquina local.
  3. En la barra de menús superior, haga clic en Depurar - Iniciar sin depurar o presione Ctrl + F5.
  4. Cuando la aplicación se haya implementado, descarte fitbox mediante la extracción del desencadenador en un controlador de movimiento.

Capítulo 2: Comentarios de cursor y destino

Objetivos

  • Comportamiento y diseño visual del cursor.
  • Comentarios de cursor basados en mirada.
  • Comentarios sobre hologramas basados en mirada.

Vamos a basar nuestro trabajo en algunos principios de diseño de cursor, es decir:

  • El cursor siempre está presente.
  • No permita que el cursor sea demasiado pequeño o grande.
  • Evite la obstruir el contenido.

Instrucciones

  1. En la carpeta HoloToolkit\Input\Prefabs, busque el recurso InputManager.
  2. Arrastre y coloque inputManager en la jerarquía.
  3. En la carpeta HoloToolkit\Input\Prefabs, busque el recurso Cursor.
  4. Arrastre y coloque el cursor en la jerarquía.
  5. Seleccione el objeto InputManager en la jerarquía.
  6. Arrastre el objeto Cursor desde la jerarquía hasta el campo Cursorde SimpleSinglePointerSelectorde InputManager, en la parte inferior del inspector.

Configuración simple del selector de puntero único

Compilación e implementación

  1. Recompile la aplicación a partir de la compilación de Configuración.
  2. Abra la carpeta App.
  3. Abra la solución modelExplorer Visual Studio .
  4. Haga clic en Depurar - Iniciar sin depurar o presione Ctrl + F5.
  5. Observe cómo se dibuja el cursor y cómo cambia su apariencia si está tocándose un holograma.

Instrucciones

  1. En el panel Jerarquía, expanda el objeto AstroMan- GEO_G- Back_Center .
  2. Haga doble clic en Interactible.cs para abrirlo en Visual Studio.
  3. Descomprima las líneas de las devoluciones de llamada IFocusable.OnFocusEnter()e IFocusable.OnFocusExit() en Interactible.cs. El InputManager del Mixed Reality Toolkit llama a estos cuando el foco (ya sea mediante mirada o apuntando el controlador) entra y sale del colisionador de GameObject específico.
/* TODO: DEVELOPER CODING EXERCISE 2.d */

void IFocusable.OnFocusEnter()
{
    for (int i = 0; i < defaultMaterials.Length; i++)
    {
        // 2.d: Uncomment the below line to highlight the material when gaze enters.
        defaultMaterials[i].EnableKeyword("_ENVIRONMENT_COLORING");
    }
}

void IFocusable.OnFocusExit()
{
    for (int i = 0; i < defaultMaterials.Length; i++)
    {
        // 2.d: Uncomment the below line to remove highlight on material when gaze exits.
        defaultMaterials[i].DisableKeyword("_ENVIRONMENT_COLORING");
    }
}

Nota:

Usamos EnableKeyword y DisableKeyword superiores. Para poder usarlos en su propia aplicación con el sombreador Estándar de Toolkit, deberá seguir las directrices de Unity para acceder a los materiales a través del script. En este caso, ya hemos incluido las tres variantes de material resaltado necesarios en la carpeta Recursos (busque los tres materiales con resaltado en el nombre).

Compilación e implementación

  1. Como antes, compile el proyecto e impleméntese en el HoloLens.
  2. Observe lo que sucede cuando la mirada está dirigida a un objeto y cuando no lo está.

Capítulo 3: Técnicas de destino

Objetivos

  • Facilitar el destino de hologramas.
  • Estabilizar los movimientos naturales de la cabeza.

Instrucciones

  1. En el panel Jerarquía, seleccione el objeto InputManager.
  2. En el panel Inspector, busque el script Gaze Stabilizer (Estabilizador de mirada). Haga clic en él para abrir Visual Studio, si desea echar un vistazo.
    • Este script recorre en iteración ejemplos de datos de Raycast y ayuda a estabilizar la mirada del usuario para la precisión de destino.
  3. En el inspector, puede editar el valor Ejemplos de estabilidad almacenados. Este valor representa el número de muestras en las que el estabilizador recorre en iteración para calcular el valor estabilizado.

Capítulo 4: Indicador direccional

Objetivos

  • Agregue un indicador direccional en el cursor para ayudar a encontrar hologramas.

Instrucciones

Vamos a usar el archivo DirectionIndicator.cs, que hará lo siguiente:

  1. Muestra el indicador direccional si el usuario no está mirando los hologramas.
  2. Oculte el indicador direccional si el usuario está mirando los hologramas.
  3. Actualice el indicador direccional para que apunte a los hologramas.

Comencemos.

  1. Haga clic en el objeto AstroMan en el panel Jerarquía y haga clic en la flecha para expandirlo.
  2. En el panel Jerarquía, seleccione el objeto DirectionalIndicator en AstroMan.
  3. En el panel Inspector, haga clic en el botón Agregar componente.
  4. En el menú, escriba en el cuadro de búsqueda Indicador de dirección. Seleccione el resultado de la búsqueda.
  5. En el panel Jerarquía, arrastre y coloque el objeto Cursor en la propiedad Cursor del inspector.
  6. En el panel Project, en la carpeta Hologramas, arrastre y coloque el recurso DirectionalIndicator en la propiedad Indicador direccional del inspector.
  7. Compile e implemente la aplicación.
  8. Vea cómo el objeto de indicador direccional le ayuda a encontrar al astronauta.

Capítulo 5: Afición

Objetivos

  • Use la tecnología de diseño para que los hologramas siempre se acomenten hacia usted.

Usaremos el archivo Billboard.cs para mantener un GameObject orientado de forma que esté orientado al usuario en todo momento.

  1. En el panel Jerarquía, seleccione el objeto AstroMan.
  2. En el panel Inspector, haga clic en el botón Agregar componente.
  3. En el menú, escriba en el cuadro de búsqueda Dedón. Seleccione el resultado de la búsqueda.
  4. En el inspector, establezca eje dinámico en Y.
  5. ¡Pruébelo! Compile e implemente la aplicación como antes.
  6. Vea cómo se enfrenta el objeto Descándalo, independientemente de cómo cambie el punto de vista.
  7. Elimine el script de AstroMan por ahora.

Capítulo 6: Tag-Along

Objetivos

  • Use Tag-Along para que nuestros hologramas nos sigan por la sala.

A medida que trabajemos en este problema, nos guiaremos por las siguientes restricciones de diseño:

  • El contenido siempre debe estar de un vistazo.
  • El contenido no debe estar en el camino.
  • El contenido del bloqueo de la cabeza no está cómodo.

La solución que se usa aquí es usar un enfoque de "etiqueta".

Un objeto de etiquetas nunca sale completamente de la vista del usuario. Puede pensar que una etiqueta es un objeto adjunto a la cabeza del usuario por bandas de música. A medida que el usuario se mueve, el contenido permanecerá de un vistazo sencillo deslizándose hacia el borde de la vista sin salir por completo. Cuando el usuario mira hacia el objeto de etiqueta, se ve más a la vista.

Vamos a usar el archivo SimpleTagalong.cs que hará lo siguiente:

  1. Determine si el objeto Tag-Along está dentro de los límites de la cámara.
  2. Si no está dentro del frustum de vista, coloque el Tag-Along en parcialmente dentro del frustum de vista.
  3. De lo contrario, coloque el Tag-Along a una distancia predeterminada del usuario.

Para ello, primero debemos cambiar el script Interactible.cs para llamar a TagalongAction.

  1. Edite Interactible.cs completando el ejercicio de codificación 6.a (descomprimiendo las líneas 84 a 87).
/* TODO: DEVELOPER CODING EXERCISE 6.a */
// 6.a: Uncomment the lines below to perform a Tagalong action.
if (interactibleAction != null)
{
    interactibleAction.PerformAction();
}

El script InteractibleAction.cs, emparejado con Interactible.cs, realiza acciones personalizadas al pulsar hologramas. En este caso, usaremos uno específicamente para la etiqueta.

  • En la carpeta Scripts, haga clic en el recurso TagalongAction.cs para abrir en Visual Studio.
  • Complete el ejercicio de codificación o cámbiese por lo siguiente:
    • En la parte superior de la jerarquía, en la barra de búsqueda, escriba ChestButton_Center y seleccione el resultado.
    • En el panel Inspector, haga clic en el botón Agregar componente.
    • En el menú, escriba en el cuadro de búsqueda Acción tagalong. Seleccione el resultado de la búsqueda.
    • En Hologramas carpeta, busque el recurso Tagalong.
    • Seleccione el ChestButton_Center objeto en la jerarquía. Arrastre y coloque el objeto TagAlong desde el panel Project en inspector en la propiedad Object To Tagalong.
    • Arrastre el objeto Acción tagalong desde inspector hasta el campo Acción interactible del script Interactible.
  • Haga doble clic en el script TagalongAction para abrirlo en Visual Studio.

Configuración interactuable

Es necesario agregar lo siguiente:

  • Agregue funcionalidad a la función PerformAction en el script TagalongAction (heredado de InteractibleAction).
  • Agregue el ajuste de pantalla al objeto con mirada y establezca el eje de pivote en XY.
  • A continuación, agregue Tag-Along al objeto .

Esta es nuestra solución, de TagalongAction.cs:

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using HoloToolkit.Unity;
using UnityEngine;

public class TagalongAction : InteractibleAction
{
    [SerializeField]
    [Tooltip("Drag the Tagalong prefab asset you want to display.")]
    private GameObject objectToTagalong;

    private void Awake()
    {
        if (objectToTagalong != null)
        {
            objectToTagalong = Instantiate(objectToTagalong);
            objectToTagalong.SetActive(false);

            /* TODO: DEVELOPER CODING EXERCISE 6.b */

            // 6.b: AddComponent Billboard to objectToTagAlong,
            // so it's always facing the user as they move.
            Billboard billboard = objectToTagalong.AddComponent<Billboard>();

            // 6.b: AddComponent SimpleTagalong to objectToTagAlong,
            // so it's always following the user as they move.
            objectToTagalong.AddComponent<SimpleTagalong>();

            // 6.b: Set any public properties you wish to experiment with.
            billboard.PivotAxis = PivotAxis.XY; // Already the default, but provided in case you want to edit
        }
    }

    public override void PerformAction()
    {
        // Recommend having only one tagalong.
        if (objectToTagalong == null || objectToTagalong.activeSelf)
        {
            return;
        }

        objectToTagalong.SetActive(true);
    }
}
  • ¡Pruébelo! Compile e implemente la aplicación.
  • Observe cómo el contenido sigue el centro del punto de mirada, pero no continuamente y sin bloquearlo.