Patches
Los patches te permiten crear lógica con nodos y conexiones en lugar de escribir código. Usa uno cuando un evento no te baste.
Un patch está a medio camino entre los eventos y los scripts:
- Los eventos son sencillos, pero no pueden guardar un valor ni hacer cálculos.
- Los scripts pueden hacerlo todo, pero tienes que escribir código.
Prueba un patch la primera vez que necesites algo como «…pero solo si la puntuación pasa de diez» o «…muévelo un poco más lejos cada vez».
Un patch se ejecuta tan rápido como el código escrito a mano. Puedes verlo como código cuando quieras en el panel Code. Además, es la forma más rápida de comprobar que un grafo hace lo que pretendías.
Todos los nodos y sus puertos están en la referencia de nodos de patch: 203 nodos en 24 categorías.
Crear un patch
- Abre el Patch editor desde la barra lateral izquierda. Muestra el grafo de la escena.
- Haz clic en + Add node y elige un nodo del grupo Events. Ahí empieza el grafo.
- Añade un nodo que haga algo, por ejemplo uno que cambie un componente.
- Arrastra una conexión desde la salida de pulso del nodo de evento hasta la entrada de pulso del otro nodo.
- Abre el panel Code para revisar tu grafo como código.
Tipos de nodo
| Tipo | Cómo reconocerlo | Qué hace |
|---|---|---|
| Evento | solo tiene salidas, y una de ellas es un pulso | pone en marcha el grafo: al iniciar, al tocar, en cada fotograma |
| Efecto | un pulso de entrada y uno de salida | hace algo, en orden |
| Control | divide o repite el pulso | ramificar, bloquear, repetir, recorrer una lista, una sola vez, esperar |
| Datos | no tiene pulsos | da un valor: un número, una suma, un campo de un componente |
La conexión de pulso marca el orden en que pasan las cosas. Síguela desde un nodo de evento para leer la secuencia. Las conexiones de datos solo llevan valores. No tienen orden.
Puertos y conexiones
Cada puerto tiene un tipo: número, booleano, texto, vector, color u objeto. Los puertos de tipos distintos no se pueden conectar. Así se detectan muchos errores antes de ejecutar nada.
Un puerto de tipo vector se despliega en x, y y z. Puedes conectar uno de ellos y
escribir los otros dos.
Una entrada sin conexión usa el valor que escribiste en el nodo. Así que conecta solo lo que cambia.
Elegir qué objeto usa un nodo
Los nodos de componente, como «get transform» o «set material», necesitan saber con qué objeto trabajar.
- Deja el objeto vacío y el nodo usa este objeto: aquel al que está vinculado el patch.
- Indica un objeto y el nodo trabaja con ese objeto.
Hay dos cosas que lo facilitan:
- Los nodos get no fallan. Si lees un componente que el objeto no tiene, no obtienes nada, y el grafo sigue funcionando.
- Los nodos set solo cambian lo que has rellenado. Todo lo demás se queda como estaba.
Así coinciden con todo lo que ves en el editor. Los scripts usan radianes, así que convierte el valor cuando pases una rotación de un patch a un script o al revés.
Qué hay en el menú de nodos
| Grupo | Qué encontrarás |
|---|---|
| Events | 30 puntos de inicio: inicio, fotograma, toque, teclas, colisiones, seguimiento |
| Components | leer y cambiar cualquier componente |
| Math, Vectors, Logic, Strings | cálculos, comparaciones, vectores y texto |
| Flow | ramificar, bloquear, repetir, recorrer una lista, una sola vez, esperar, secuencia |
| State | contador, interruptor, temporizador, suavizado |
| Entities, Lifecycle | buscar, crear, generar y destruir objetos |
| Physics | impulsos, fuerzas, velocidad, raycast |
| Multiplayer | enviar, recibir, estado compartido, generar objetos |
| Globals, Variables, Messaging | valores compartidos con otros patches y scripts |
| UI | leer y cambiar las variables de una tarjeta de interfaz |
| Functions | llamar a otro patch o a un script |
Reutilizar un patch
Guarda un grafo como patch en los recursos de tu proyecto y podrás soltarlo en otros lienzos. Lo que obtienes depende de cómo lo hayas construido:
| Lo que construiste | Lo que obtienes |
|---|---|
| sin nodos de entrada ni de salida | un comportamiento: lo sueltas y funciona, sin conexiones |
| entradas, salidas y una entrada de pulso | un paso: se ejecuta cuando llega el pulso, y después sus salidas están listas |
| entradas y salidas, pero sin pulso | una función: sus salidas se calculan allí donde se leen |
Los conectores del patch salen de los nodos de entrada y de salida que tiene dentro. Añade uno y aparecerá en todos los sitios donde se usa el patch. Cuando editas el patch, todo lo que lo usa se actualiza al momento.
Dentro de una función no existe «este objeto», así que los nodos de objetos y de componentes no funcionan ahí. Usa las funciones para datos, cálculos y lógica. Haz el trabajo con la escena en el patch que llama a la función.
Los patches también pueden llamar a scripts. Es la forma habitual de hacer algo que ningún nodo cubre.
Guardar valores entre ejecuciones
Hay tres formas de guardar un valor. Se diferencian en quién puede verlo:
| Grupo de nodos | Se comparte con |
|---|---|
| Variables | los nodos de este patch |
| Globals | todos los patches, scripts y eventos del proyecto |
| Messaging | quien esté escuchando, como un aviso puntual enviado por nombre |
Hay dos tipos de globales:
- las globales project conservan su valor cuando el visitante pasa de un espacio a otro;
- las globales space empiezan de cero en cada espacio.
Los nombres de las variables, las globales y los mensajes se escriben, no se conectan.
Escribir una línea de JavaScript
Hay dos nodos que aceptan JavaScript directamente:
- Expression (
expression) devuelve un valor. - Action (
action) ejecuta instrucciones.
Dentro de ellos puedes usar todo lo que puede usar un script.
Úsalos para algo pequeño que ningún nodo cubra. Si ves que estás escribiendo mucho código en ellos, escribe mejor un script y llámalo desde el grafo.
Cuando algo falla
Abre el panel Code. Si algo falla en el grafo, el problema aparece ahí. Dos causas habituales son un bucle en las conexiones de datos y un JavaScript con errores en un nodo Action.
Un patch con errores no detiene la escena. Tus otros patches siguen funcionando.
Siguiente: Controles de juego — deja que la gente se mueva por la escena.