Cómo utilizar las señales de la línea de tiempo

Desde la introducción de Timeline en 2017, sabemos que has estado esperando pacientemente una forma de enviar eventos. Bueno, ¡no esperes más! A partir de Unity 2019.1, una nueva función llamada Señales le ayuda a enviar eventos. Vamos a sumergirnos y ver de qué se trata esta nueva característica.
Así es como se ven las señales en la ventana de la línea de tiempo:

Hemos creado Signals para establecer un canal de comunicación entre Timeline y sistemas externos. ¿Pero qué significa eso? ¿Por qué decidimos adoptar este enfoque?
Digamos que estás usando Timeline para crear una escena. Cuando termine la escena cinemática, quieres cargar una nueva escena y activar un sistema de física. Hay un par de formas de implementar este escenario:
Cuando finalice tu escena, utiliza scripts personalizados para hacer que tu instancia de Timeline interactúe directamente con un administrador de escena y tu sistema de física.
Cuando finalice la escena, cree marcadores y señales para enviar una señal de "Escena finalizada" y hacer que los sistemas interesados reaccionen a la señal.
El equipo de Timeline optó por el segundo enfoque porque mantiene al emisor independiente del receptor. Mantenerlos independientes agrega mucha flexibilidad, potencia y reutilización. Para entender esto mejor, veamos cómo funcionan juntas las diferentes piezas.
Para utilizar señales para comunicarse con sistemas externos, se necesitan tres piezas: un activo de señal, un emisor de señal y un receptor de señal.

- Emisor de señal: Un emisor de señal contiene una referencia a un activo de señal. En la línea de tiempo, un emisor de señal se representa visualmente mediante un marcador. Puede colocar un marcador en una pista o en el área Marcadores debajo de la regla de la línea de tiempo.

- Receptor de señal: Un receptor de señales es un componente con una lista de reacciones. Cada reacción está vinculada a un activo de señal.
- Activo de señal: Un activo de señal es la asociación entre un emisor de señal y un receptor de señal. Puede reutilizar el mismo activo de señal en muchas instancias de la línea de tiempo.
Aquí tienes un juego sencillo en el que debes derrotar a un conejo zombi presionando las teclas de flecha que coinciden con las imágenes direccionales que se muestran en la pantalla:
La imagen direccional cambia aleatoriamente con cada ritmo musical. Si no presiona la tecla de flecha derecha antes de que cambie la imagen, perderá. Si presionas un cierto número de teclas de flecha, ganas.
En el juego, la instancia GameTimeline incluye la jugabilidad. Utiliza señales para mostrar nuevas imágenes direccionales con cada ritmo musical, como se muestra en la instancia de GameTimeline terminada a continuación:

Para demostrar cómo crear y configurar señales, comencemos con un proyecto en el que no se ha creado ninguna señal. Si quieres seguirlo puedes descargar el proyecto aquí.
Primero, para ver el área de Marcadores donde se agregan señales, haga clic en el ícono Marcador junto a los modos de Edición de clip. El área Marcadores aparece debajo de la regla de la línea de tiempo:

Para agregar un emisor de señal, haga clic derecho en el área Marcadores y seleccione Agregar emisor de señal.

Aparece un emisor de señal en el área de marcadores:

El emisor de señal que acaba de agregar se selecciona y la ventana del Inspector muestra sus propiedades. La ventana del Inspector también proporciona botones para crear otras partes de una señal:

Para vincular el emisor de señal a un receptor de señal, debe agregar un nuevo activo de señal. En la ventana del Inspector, haga clic en Crear señal…. Nombre el activo de señal "ShowKey" porque este activo de señal se usará para vincular un emisor con un receptor para cambiar la imagen direccional. Haga clic en Guardar y el activo de señal se agregará al proyecto.
También desea que el emisor de señal esté asociado con un receptor de señal, así que haga clic en Agregar receptor de señal. La ventana del Inspector ahora debería verse así:

Antes de continuar, detengámonos un momento y describamos lo que está pasando. Al hacer clic en el botón Agregar receptor de señal, suceden dos cosas: se agrega un nuevo componente Receptor de señal al GameObject vinculado y se agrega una nueva reacción y se vincula al Activo de señal que acaba de crear. Puedes ver que están vinculados porque "ShowKey" aparece como la señal de emisión y "ShowKey" se agrega a la lista de reacciones:

La ventana del Inspector muestra dos cosas: las propiedades del Emisor de señal y las reacciones definidas por el componente Receptor de señal:

Aunque el componente Receptor de señal está vinculado al GameObject asociado con la instancia de Línea de tiempo, puedes editar el Receptor de señal en la ventana del Inspector. La reacción se invoca cuando el receptor de señal recibe la señal.
El último paso es especificar qué hace la reacción. En este ejemplo, hay un componente llamado Manager con un método ShowRandomKey . Este método muestra una nueva tecla de flecha aleatoria. Para que la reacción llame al método ShowRandomKey , seleccione este método para el evento de Unity, como se muestra a continuación:

¡Y eso es todo! Después de agregar el emisor de señal y definir su receptor de señal y la reacción, ahora tiene un ejemplo de una instancia de línea de tiempo que se comunica con la escena.
Cuando la línea de tiempo llega al emisor de señal, se emite la señal ShowKey. El receptor de señal, que está escuchando la señal ShowKey, llama al método ShowRandomKey .
Pero no tienes por qué detenerte ahí. Varios emisores de señales pueden emitir la misma señal. Por ejemplo, la siguiente instancia de línea de tiempo tiene el mismo emisor de señal copiado y movido a diferentes momentos; hay un emisor para cada ritmo musical:
También puede arrastrar un activo de señal directamente desde la ventana del Proyecto a la ventana de la Línea de tiempo. Se crea automáticamente un emisor de señal con la propiedad Emitir señal ya configurada.
Para ver cómo luce el proyecto terminado, con todas las señales, descárgalo aquí.
Para configurar tu primera señal, necesitas:
Haga clic derecho en un área de marcador o en una pista que admita señales y luego elija Agregar emisor de señal...
En la ventana del Inspector, haga clic en Crear activo de señal, elija un nombre de archivo y presione Entrar.
Aún en el Inspector, haga clic en el botón Crear reacción... y defina la reacción asociada con la señal que acaba de crear.
- ¿Puedo tener varios receptores en un solo GameObject? Sí, todos los receptores de señales de un GameObject reciben las señales enviadas a ese GameObject.
- ¿Se puede reutilizar un activo de señal entre múltiples instancias de Timeline? Sí, un activo de señal se puede utilizar en más de una instancia de línea de tiempo.
- ¿Es posible ampliar y personalizar un activo de señal? Sí, el activo de señal, el emisor de señal y el receptor de señal se pueden ampliar. Pero ese es un tema para otro día; habrá otra publicación de blog sobre la personalización.
- ¿Se garantiza la emisión de señales? Sí. Las señales no se omitirán; se emitirán en el siguiente cuadro independientemente de los FPS del juego.
- ¿Qué sucede si un activo de línea de tiempo duplicado contiene emisores de señales? Los emisores de señales mantienen su referencia a sus activos de señal. Los activos de señal no se duplican.
---
Consulta el contenido de aprendizaje para principiantes y avanzados sobre el uso de Timeline en la plataforma Unity Learn Premium .