Saltar al contenido principal

Eventos

Un evento es una frase: cuando pase esto, haz estas cosas.

CUANDO  alguien toca la puerta
ENTONCES reproducir el crujido
abrirla en 600 ms
desactivar el cartel de «cerrado»

El cuándo es un disparador. El entonces es una lista de pasos. Esa es toda la idea, y cubre una parte sorprendente de lo que necesita un proyecto.

Un objeto puede llevar tantos eventos como quieras, y cada uno se ejecuta por su cuenta.

Estos son los nombres que ves en el editor

Si además escribes scripts o construyes patches, cada uno tiene también un nombre corto de código: las referencias de disparadores y de pasos los listan uno al lado del otro. Construyendo en el editor, nunca lo necesitas.

Dos listas generadas que conviene tener abiertas

Todos los disparadores a los que puedes reaccionar: disparadores. Todas las acciones que puedes realizar: pasos. Ambas salen directamente del motor, así que nunca están desactualizadas.

Todos los disparadores, y para qué sirven

La referencia de disparadores generada trae los parámetros de cada uno. Aquí está lo que significan y dónde sorprenden.

Entrada

En el editorSe dispara cuando
Mouse buttonhay un toque o clic — ramas para clic, pulsar y soltar
Hoverel cursor entra en el objeto o sale de él
Double clickdos clics en el mismo objeto en menos de 300 ms
Long pressse mantiene 450 ms sin moverse
Keyuna tecla — ramas para pulsar y soltar
Scrollgira la rueda; se puede filtrar por dirección
Dragse arrastra contenido AR colocado
Pinchse pellizca contenido AR colocado para escalarlo
Rotatese gira contenido AR colocado

Los tres disparadores gestuales solo existen en escenas surface: tratan del contenido que el visitante colocó. Se repiten continuamente mientras el dedo se mueve, así que trátalos como un flujo y no como un instante único.

Ciclo de vida

En el editorSe dispara cuando
Launcharranca la escena — llega a todos los objetos
Resizela ventana o el viewport cambia de tamaño
Pausela app o la pestaña pasa a segundo plano
Resumevuelve
on-pause es donde se paran las cosas con educación

Los sonidos siguen sonando cuando un visitante cambia de app, a menos que los pares. Pausar el audio y los temporizadores en on-pause y restaurarlos en on-resume es un detalle pequeño que la gente nota.

Seguimiento

En el editorSe dispara cuando
Detectse encuentra el marcador o la superficie
Tracking lostse pierde el seguimiento
Placedel visitante ha colocado el contenido
VPS readyel posicionamiento ha arrancado
VPS localizedse ha encontrado la posición real del visitante
VPS localization failedno se ha encontrado — esto es normal, no un error
VPS errorel posicionamiento no ha podido funcionar

Cada uno se ofrece solo en escenas cuyo anclaje puede producirlo. La detección se informa en el flanco, cuando empieza el seguimiento, no en cada fotograma.

Que falle una localización VPS es lo esperado

on-vps-not-localized se dispara de forma rutinaria mientras el visitante camina buscando un sitio que el mapa reconozca. Trátalo como «sigue intentándolo», no como un fallo que anunciar.

Tiempo y proximidad

En el editorSe dispara cuando
Delayuna vez, tras un retardo
Every N secondsde forma repetida — un recuento de 0 significa indefinidamente
Distancealgo entra en una distancia, o sale — dos ramas
Visibilityel objeto se muestra o se oculta
Variable changecambia el valor de una variable

on-distance tiene una opción de «comprobar al inicio». Sin ella, un objeto que ya está cerca al abrirse la escena no se disparará hasta que algo se mueva.

Estado, física e interfaz

En el editorSe dispara cuando
State activeeste objeto entra en el state que elegiste
State inactivesale de ese state
Collisioneste objeto toca a otro — opcionalmente solo a algunos
UI actionse ha pulsado un botón de una tarjeta de interfaz
Signalotro evento ha emitido una señal
Game controlsel personaje ha cambiado de estado

Un evento, las dos direcciones

Algunos disparadores tienen ramas, así que un solo evento cubre todos los desenlaces. Define una distancia una vez y responde tanto a la llegada como a la salida:

DisparadorRamas
Distanceentró · salió
Keypulsada · soltada
Hoverentró · salió
Mouseclic · pulsado · soltado
Visibilitymostrado · oculto
Game controlquieto · moviéndose · saltando · corriendo

En el editor obtienes una sección por rama. Los disparadores sin ramas tienen una sola sección, «al activarse».

A qué objetos afecta un paso

Cada paso tiene destinos.

Déjalos vacíos y el paso actúa sobre el objeto que lleva el evento, que es el caso habitual. Rellénalos y actuará sobre esos objetos, que es como un solo evento en un botón abre tres puertas.

Los toques suben a los padres

Un toque, un hover o una acción de tarjeta llegan al objeto y a sus padres.

Eso ahorra mucha repetición: pon un evento en un grupo y capturará los toques sobre todo lo que contenga, en vez de copiar el mismo evento en cuarenta objetos.

Dos efectos secundarios agradables:

  • «tocar en cualquier parte de este panel» es un único evento en el panel;
  • deslizarse entre dos hijos del mismo padre no dispara hover/blur en el padre, porque nunca llegaste a salir de él.

Las colisiones son la excepción: se disparan solo donde ocurrieron. Y el teclado, el desplazamiento, el cambio de tamaño y el arranque de escena no tratan de ningún objeto concreto, así que llegan a todo.

Varias teclas para un evento

Saltar con Espacio o con W es un evento, no dos copias. La primera combinación vive en el disparador; las demás van en una lista de «o», escrita como texto:

ArrowUp        ctrl+KeyW        KeyA+KeyS        Space+double

Los modificadores pertenecen a la combinación en la que están escritos, y una alternativa sustituye la asignación en vez de sumarse a ella. Los botones del ratón usan el mismo formato (mouse:middle).

Mejor aún: nombra una asignación del proyecto en vez de una tecla. Reasigna «saltar» una vez en los ajustes del proyecto y todos los eventos que la mencionan se mueven con ella, que es lo que querrás el día que alguien pida controles para zurdos.

Todos los pasos, y qué hacen

Los parámetros están en la referencia de pasos generada.

En el editorHace
Scene transitionir a otra escena
Space transitionir a otro space, opcionalmente a una escena concreta
Open URLabrir un enlace, en esta pestaña o en otra
Open messengerFacebook, VK, OK, Instagram, Telegram, WhatsApp o Viber
Call phone numberiniciar una llamada
Compose emailiniciar un correo
File downloaddescargar un archivo de tu proyecto
Contact downloadofrecer una tarjeta de contacto con los campos que rellenes

El paso de mensajería toma un id de página para Facebook, VK y OK, un nombre de usuario para Instagram y Telegram, y un número de teléfono para WhatsApp y Viber.

Cambiar la escena

En el editorHace
Show / hide objectmostrar u ocultar los destinos — en una escena, esto la activa
Set statepasar a un state con nombre, opcionalmente con una duración
Override propertiesaplicar un conjunto puntual de valores como state temporal

Animación

En el editorHace
Play animationreproducir un preset de línea de tiempo — bucle, repeticiones, velocidad, retardo
Stop animationdetener uno
Transformationmover, rotar o escalar a lo largo del tiempo
Opacityfundir
Materialmezclar los materiales de los destinos hacia uno guardado
Bone transformmover un hueso concreto
Built-in animationreproducir un clip que vino con un modelo

Play animation puede arrancar una animación de cualquier objeto, no solo del que lleva el evento, que es como un botón lanza una secuencia en la que participan varias cosas a la vez.

Movimiento

En el editorHace
Follow objectseguir de forma continua — distancia, desplazamiento, suavizado y velocidad
Look at objectgirarse hacia algo sin moverse
Stop followingdetener ambas cosas
Fly along pathrecorrer un camino
Stop path flightdetener eso

Lógica

En el editorHace
If — otherwisecomprobar una condición y ejecutar una de dos listas de pasos anidadas
Set variablefijar, sumar a, o alternar una variable
Send signalemitir una señal — a los destinos, o a todo el mundo
Wait, thenesperar antes de ejecutar los pasos anidados dentro

Puntero

Lock pointer y Release pointer ocultan el cursor del ratón y entregan su movimiento a tu escena, que es lo que necesita un juego en primera persona para que el puntero no se escape de la ventana.

Condiciones

if_action es un paso, no una propiedad del evento, así que las condiciones se anidan, y «un si dentro de un si» es como se consiguen más de dos desenlaces.

Lo que mira la condición lo fija su fuente:

FuenteCompruebaUsando
alwaysnada — siempre cierto
variableel valor de una variablevariable, operador, valor
distancea qué distancia está el objeto del evento de otrodestino, operador, umbral
stateen qué state está otro objetodestino, state
visiblesi algo es visibledestino, indicador
randomel azarumbral, en porcentaje

Los valores se leen con holgura: 3 se convierte en número, true en booleano, y lo demás sigue siendo texto. == y != comparan de forma exacta; el resto de operadores comparan como números.

Variables, señales y temporizadores

Las variables duran lo que dura la visita, no el proyecto: empiezan vacías cada vez que alguien abre tu experiencia. Dales sus valores iniciales desde un evento al arrancar la escena. Son las mismas variables que un script ve como globals.

Las señales (emit_signalon-signal) encadenan eventos sin copiar pasos: varios eventos escuchan level-complete, y cualquier cosa puede emitirlo. Una señal que se reemite a sí misma se detiene tras ocho vueltas en lugar de congelar el fotograma.

Los temporizadores arrancan cuando su objeto cobra vida y se reinician cuando se desactiva. Volver a activarlo reinicia la cuenta en vez de soltar una ráfaga de ticks perdidos.

States

Un state es una instantánea con nombre de los ajustes de un objeto: posición, color, visibilidad, lo que quieras. Cambiar a un state aplica la instantánea, y cambiar con una duración hace que la transición sea suave.

Los states son la forma limpia de construir un interruptor, un resaltado o una puerta abierta o cerrada, sin animar nada a mano.

Mientras haya un state seleccionado, tus cambios van dentro de él

Cambiar un objeto mientras uno de sus states está activo es editar la instantánea de ese state, no el objeto. Es exactamente lo que quieres al construir states, y profundamente confuso cuando no te habías dado cuenta de que había uno seleccionado.

Re-tracking

En escenas AR, el modo de re-tracking de cada evento decide qué pasa cuando el marcador se pierde y se vuelve a encontrar: empezar de cero al momento, no reiniciar nunca, o reiniciar cuando los pasos en curso hayan terminado.

Si además escribes scripts

Eventos, patches y scripts comparten un mismo vocabulario: el mismo toque llega a los tres.

Atiende cada disparador en un solo sitio

El mismo disparador en el mismo objeto, cableado a la vez como evento y como script, se ejecuta dos veces. Si algo se dispara por duplicado, casi siempre es por esto.


Siguiente: Animación — hacer que las cosas se muevan.