Configuración de eventos de presión de botón

Completado

Ya ha creado todos los botones necesarios para este proyecto, pero no los ha configurado para que realicen una acción cuando se presionan. En esta unidad, creará un evento de presión de botón que desencadena una acción al presionar un botón.

Cada botón creado tiene cuatro propiedades Events que se pueden configurar para desencadenar una acción:

  • Touch Begin(): desencadena una acción cuando se toca inicialmente un objeto.
  • Touch End (): desencadena una acción cuando finaliza el proceso de tocar un objeto.
  • Button Pressed (): desencadena una acción cuando se presiona un botón.
  • Button Released (): desencadena una acción cuando se suelta un botón.

En esta unidad, se centrará en el evento Button Pressed().

En este momento, si quisiera entrar en el modo Play (Jugar), el objeto StatsCard bloquearía el objeto PlayerButton. Además, si presionara el objeto CloseCardButton, no se produciría ninguna acción concreta.

Puede probar esto por su cuenta mediante la simulación de entrada en el editor. Para entrar en el modo Play (Jugar), presione el botón para jugar en la parte superior del editor. Una vez que se encuentre en el modo Play (Jugar), siga las instrucciones que se indican a continuación para interactuar con los objetos.

Cómo desplazarse por la escena:

  • Use las teclas W/A/S/D para mover la cámara hacia delante, la izquierda, atrás o la derecha.
  • Use Q/E para mover la cámara verticalmente.
  • Mantenga presionado el botón derecho del mouse para girar la cámara.

Cómo simular la entrada de la mano:

  • Mantenga presionada la barra espaciadora para habilitar la mano derecha.
  • Mantenga presionada la barra espaciadora y mueva el mouse para mover la mano.
  • Use la rueda de desplazamiento del mouse para ajustar la profundidad de la mano.

Configuración del evento de presión del botón PlayerButton

De forma predeterminada, los objetos de la escena están establecidos en active. Los valores true o false determinan si un objeto está activo o no. Para administrar si un objeto está activo, puede usar tanto el editor como código.

En la ventana Inspector, puede controlar si un objeto está activo al principio mediante la casilla situada junto al nombre del objeto. Como el objeto StatsCard y sus elementos secundarios no deben estar activos cuando se inicia la escena, desactive la casilla para que el objeto no esté visible.

Screenshot of the inspector window for the stats card object. The object is unchecked for visibility.

En algunos casos, es necesario escribir un script para administrar si un objeto está activo. Aunque puede deshabilitar objetos (o establecerlos como inactivos) en la ventana Inspector, necesita un script para indicarle a Unity cómo volver a activar el objeto después de que se actualice la escena.

Cuando se presiona el objeto PlayerButton, el objeto StatsCard debe establecerse en active. El componente PressableButton del objeto PlayerButton proporciona eventos que se pueden configurar mediante las funciones que se proporcionan en Mixed Reality Toolkit (MRTK). Una función SetActive establece un objeto como activo cuando se presiona el botón.

Al crear un evento Button Pressed (), el objeto que lo recibe se asigna primero, seguido del método. En este caso, StatsCard recibe el evento.

  1. En la ventana Hierarchy (Jerarquía), seleccione el objeto PlayerButton.

  2. En la ventana Inspector, en el componente PressableButton,seleccione el botón + en la propiedad Button Pressed().

    Screenshot of the pressable button component for the player button. The plus icon is highlighted for the button press property.

  3. En la sección que aparece, arrastre el objeto StatsCard al campo None (Object) [Ninguno (objeto)].

    Luego, seleccione la lista desplegable de funciones que aparece y elija GameObject>SetActive (bool) [SetActive (booleano)].

    Una vez asignada la función, active la casilla situada junto a la asignación de objeto StatsCard.

    Screenshot of the newly added button press event for the player button object.

Ahora que se ha agregado el evento Button Pressed () para el objeto PlayerButton, acceda al modo Play (Jugar). En la ventana Game (Juego), use la entrada manual simulada para presionar el objeto PlayerButton a fin de ver la presentación del objeto StatsCard.

A demo of pressing the player button object with simulated hand input. When the player button object is pressed, the stats card appears.

Configuración del evento de presión del botón CloseCard

Aunque MRTK proporciona scripts con funciones que se pueden usar para eventos, también puede escribir y usar sus propios scripts.

Cuando se presiona el objeto CloseCardButton, el objeto StatsCard y todos sus elementos secundarios deben establecerse en inactivos. Dado que MRTK no proporciona ninguna función para esta lógica, puede crear su propio script que use la función .SetActive() de Unity. Esta es la función subyacente que se usa para establecer objetos activos o inactivos. La sintaxis es la siguiente:

public void SetActive(bool value);

Ahora tendrá la oportunidad de usarla en su propio script.

  1. En la ventana Project (Proyecto), vaya a la carpeta Scripts.

  2. En la ventana Project (Proyecto), seleccione el icono + y seleccione C# Script (Script de C#). Asigne al script el nombre CloseCard.

  3. En la ventana Project (Proyecto), haga doble clic en el script CloseCard para abrirlo en Visual Studio.

  4. El script que va a crear consta de una función Disable(). Cuando se le llama, el objeto gameObject (por ejemplo, StatsCard), se establece en inactivo. Como ya se ha indicado, el valor true o false determina si un objeto está activo o no.

    En Visual Studio, reemplace el código de CloseCard por lo siguiente:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CloseCard : MonoBehaviour
    {
        public void Disable()
        {
            gameObject.SetActive(false);
        }
    }
    
  5. Guarde el archivo y vuelva a Unity.

Ahora que tiene una función disponible para establecer un objeto en inactivo, puede usar la función en un evento Button Pressed () para el objeto StatsCard. Aun así, para poder usar la función, debe agregarla como componente al objeto que recibirá el evento.

  1. En la ventana Hierarchy (Jerarquía), seleccione el objeto StatsCard. En la ventana Inspector, agregue el script CloseCard como componente. Como alternativa, también puede arrastrar el script CloseCard a StatsCard en la ventana Hierarchy (Jerarquía).

  2. En la ventana Hierarchy (Jerarquía), seleccione el objeto CloseCardButton.

  3. En la ventana Inspector, en la propiedad Events (Eventos), seleccione el botón + para crear un evento Button Pressed(). En la sección que aparece, arrastre el objeto StatsCard al campo None (Object) [Ninguno (objeto)].

    Luego, seleccione la lista desplegable de funciones que aparece y seleccione CloseCard>Disabled ().

    Screenshot of the events properties for the close card button object. The newly added button press event is highlighted.

Ahora que se ha agregado el evento Button Pressed () para el objeto CloseCardButton, acceda al modo Play (Jugar) y presione el botón para ver cómo se cierra la tarjeta de estadísticas.

Screenshot of pressing the close card button object with simulated hand input. When the close card button object is pressed, the stats card is hidden.

© 2021 Warner Bros. Ent. All Rights Reserved.