El sistema Secuenciación de comandos visual de blueprint en Unreal Engine (a menudo denominado simplemente «blueprints») es un lenguaje de programación visual que utiliza una interfaz basada en nodos para crear funcionalidades de juego sin tener que escribir código. Al igual que un lenguaje de secuencias de comandos escrito, el sistema de blueprints funciona con datos tipificados como números, booleanos, matrices y estructuras. La lógica fluye a través de cables de ejecución, lo que significa que cada nodo se ejecuta solo cuando algo le indica explícitamente que lo haga.
Con las clases de blueprint, puedes emparejar componentes físicos con un comportamiento programado. Por ejemplo, un blueprint podría contener una malla estática de moneda y un comportamiento que hace que el jugador recoja la moneda cuando la toca.
Al igual que sucede con muchos de los lenguajes de programación conocidos, puedes usar el sistema para definir clases orientadas a objetos u objetos en el motor. Para los programadores, la implementación de C++ de Unreal Engine incluye marcado específico para blueprints, lo que permite crear sistemas de referencia que los diseñadores pueden ampliar.
En esta descripción general, aprenderás sobre los diferentes tipos de recursos de blueprint y harás un recorrido por una clase de blueprint de muestra, donde modificarás ciertos elementos de ese blueprint y verás cómo esos cambios afectan a esos actores de blueprint en el editor de niveles y durante el juego.
Tipos de blueprints
Existen diferentes tipos de recursos de blueprints, cada uno con su propia función. Al crear y guardar un blueprint, se convierte en un archivo de recursos en tu paquete de contenido.
Clase de Blueprint
Una clase de blueprint, a menudo abreviada como blueprint, es un recurso que permite a los creadores de contenido añadir fácilmente funcionalidad sobre clases de jugabilidad existentes. Los blueprints se crean visualmente en Unreal Editor en lugar de con código por escrito y se guardan como recursos en un paquete de contenido. En esencia, definen una nueva clase o tipo de actor, que luego se añadirá a mapas como instancias que se comportan como cualquier otro tipo de actor.
Una clase de blueprint es como una receta que utiliza componentes, variables y secuenciación de comandos visual de blueprint para describir las propiedades y los comportamientos de los objetos de tu juego. Puedes añadir instancias de clases de blueprint a tu nivel.
Este es el tipo más común con el que trabajarás: una clase de blueprint, a menudo abreviada y denominada blueprint.
Las clases de blueprint pueden ser solo de datos cuando no contienen lógica de ejecución y solo anulan variables o componentes heredados de un blueprint padre. Las clases de blueprint solo de datos se abren en un editor compacto, pero se convierten en un editor de blueprints completo si añades nueva lógica, grafos u otros elementos de secuencias de comandos.
Consulta Clase de blueprint en la documentación para obtener más información.
Blueprint de nivel
Cada nivel tiene un blueprint de nivel. Cuando creas un nuevo nivel, Unreal Engine crea automáticamente un blueprint de nivel para ese nivel. Este tipo de blueprint actúa como un grafo de eventos global para todo el nivel.
Los blueprints de nivel también proporcionan un mecanismo de control para la transmisión de niveles y las cinemáticas de Sequencer, así como para vincular eventos a actores colocados dentro del nivel.
Para abrir el blueprint de nivel de un nivel, usa el menú Blueprint en la barra de herramientas principal del editor de niveles.
Consulta Blueprint de nivel en la documentación para obtener más información.
Interfaz de Blueprint
Un recurso de interfaz de Blueprint es una colección de una o más funciones (solo nombre, sin implementación) que se pueden añadir a otros blueprints. Cualquier blueprint al que se le haya añadido la interfaz garantiza tener esas funciones. Las funciones de la interfaz pueden tener funcionalidad en cada uno de los blueprints que la añadieron. Básicamente, es como el concepto de interfaz en la programación general, que permite compartir varios tipos diferentes de objetos y acceder a ellos a través de una interfaz común. En pocas palabras, las interfaces de blueprint permiten que diferentes blueprints compartan y envíen datos entre sí.
Las interfaces de blueprint no pueden:
Añadir nuevas variables
Editar grafos
Añade componentes
Consulta Interfaz de Blueprint y la Interface Quick Start Guide en la documentación para obtener más información.
Bibliotecas de blueprints
Puedes reutilizar la lógica creando funciones y macros en recursos de «biblioteca» para que sean accesibles a todos los blueprints de tu proyecto.
Biblioteca de funciones de Blueprint
Una biblioteca de funciones de blueprint es un recurso de blueprint que almacena una colección de funciones reutilizables. Estas funciones no están vinculadas a un blueprint o actor específico, sino que son accesibles globalmente desde todo el proyecto y se pueden llamar desde cualquier clase de blueprint. Las bibliotecas mantienen las funciones útiles en un solo lugar para que no tengas que copiar y pegar los mismos nodos en varios blueprints.
Las funciones de una biblioteca de funciones de blueprint son estáticas, lo que significa que no almacenan ni recuerdan información entre llamadas, y no conocen información sobre una instancia de blueprint específica a menos que pases esos datos como parámetros. Por ello, las bibliotecas de funciones son las mejores para la lógica de propósito general que opera con entradas y devuelve un resultado. Cuando la funcionalidad depende de las variables internas de un objeto (como el inventario de un jugador), suele pertenecer al blueprint de ese objeto en lugar de a una biblioteca.
Biblioteca de macros de Blueprint
Una biblioteca de macros de blueprint es un contenedor que contiene una colección de macros o grafos autónomos que se pueden colocar como nodos en otros blueprints. Pueden servir para ahorrar tiempo, ya que pueden almacenar secuencias de nodos de uso común con entradas y salidas tanto para la ejecución como para la transferencia de datos.
Las macros se comparten entre todos los grafos que hacen referencia a ellas, pero se autoexpanden en los grafos como si fueran un nodo plegado durante la compilación. Esto significa que las bibliotecas de macros de blueprint no necesitan compilarse. Sin embargo, los cambios en una macro solo se reflejan en los grafos que hacen referencia a esa macro cuando se vuelve a compilar el blueprint que contiene esos grafos.
Consulta Blueprint Macro Library y Cómo crear macros en la documentación para obtener más información.
Las funciones son bloques de lógica reutilizables que toman entradas, se ejecutan una vez y pueden devolver un resultado. Son ideales para cálculos o comprobaciones. Las macros son diseños de grafos reutilizables que se expanden directamente hasta el blueprint en el que se utilizan. Pueden tener varias salidas de ejecución y son útiles para controlar el flujo visual.
Utilidades de blueprint
Una utilidad de blueprint (o utilidad de editor) es un blueprint solo para el editor que se puede utilizar para realizar acciones del editor o ampliar la funcionalidad del editor. Pueden exponer eventos sin parámetros como botones en la interfaz de usuario y tienen la capacidad de ejecutar cualquier función expuesta a los blueprints y actuar en el conjunto actual de actores seleccionados en el visor.
Recorrido por una clase de blueprint
Antes de empezar, necesitarás un proyecto de Unreal Editor basado en la plantilla en primera o tercera persona (cualquier variante).
Para obtener ayuda para crear un nuevo proyecto en Unreal Engine, consulta Crea tu primer proyecto en Unreal Engine.
Cómo abrir un blueprint existente
Creaste tu proyecto a partir de una plantilla, por lo que ya hay varios blueprints incluidos en tu proyecto que puedes explorar y usar. Un ejemplo de clase de blueprint incluida es el blueprint de plataforma de salto, que tiene una funcionalidad que impulsa al jugador hacia arriba. Puedes añadir instancias de este blueprint en cualquier parte de tu nivel.
Para abrir el blueprint de la plataforma de salto, sigue estos pasos:
En Unreal Engine, haz clic en el botón Almacén de contenido en la esquina inferior izquierda de la pantalla. También puedes mantener pulsada la tecla CTRL y pulsar la barra espaciadora.
Ve a la carpeta Content > LevelPrototyping > Interactable > JumpPad.
Verás un recurso
BP_JumpPad, que es una clase de blueprint. Haz doble clic en el recurso para abrirlo en el editor de blueprints.De forma predeterminada, el blueprint se abre en una nueva ventana. Puedes acoplar una ventana arrastrando la pestaña con el nombre del recurso junto a la pestaña del nivel en el editor principal.
En el editor de blueprints, puedes definir componentes, realizar operaciones de configuración, responder a eventos, organizar y modularizar operaciones, definir propiedades y mucho más. Los elementos visuales y la funcionalidad que añadas al blueprint se aplican a todas las instancias de ese blueprint que están en tu juego.
Echemos un vistazo a BP_Jumppad. En la parte superior de la ventana, puedes ver tres pestañas: Visor, Grafo de eventos y Secuencia de comandos de construcción.
Cómo construir un objeto de nivel con componentes
Haz clic en la pestaña Visor. Al igual que al usar el visor en el editor de niveles principal, se utiliza el visor de un blueprint para ver y editar un blueprint.
En esta pestaña, verás la representación visual de la plataforma de salto, que incluye una plataforma, una luz y un efecto de partículas.
En la parte izquierda de la ventana, también verás los componentes del blueprint o las piezas que definen de qué está hecho el blueprint y qué aparece en tu nivel. Usa el panel Componentes para añadir, eliminar y reorganizar los componentes del blueprint.
Los componentes básicos que puedes añadir a tu blueprint con componentes incluyen:
Geometría de colisión con componentes de colisión de cápsula, caja o esfera.
Geometría renderizada en forma de componentes de malla estática o de malla esquelética.
Controles de movimiento con componentes de movimiento.
Puedes crear un blueprint que solo contenga componentes y ningún comportamiento programado, que actúe como un objeto de nivel reutilizable que se pueda editar en un solo lugar.
También puedes hacer referencia a los componentes de tu blueprint o a sus propiedades en el grafo de eventos, para poder realizar acciones sobre esos componentes durante el tiempo de ejecución.
Echemos un vistazo más de cerca a los componentes que forman parte de BP_JumpPad:
BP_JumpPad tiene un componente de luz puntual. Haz clic en el objeto Luz puntual de la lista Componentes o en el visor. Puedes utilizar las herramientas de transformación para mover y girar esta fuente de luz.
En el lado derecho del editor de blueprints, verás el panel Detalles, que enumera las propiedades relacionadas con el componente seleccionado. Puedes editar la intensidad de esta fuente de luz, el color de la luz y mucho más.
Cómo crear funcionalidad de blueprint
Junto a la pestaña Visor , puedes ver las pestañas Grafo de eventos y Secuencia de comandos de construcción. Si creas alguna función en tu blueprint, las pestañas de esos grafos de función también aparecen aquí.
Los grafos contienen el comportamiento y la funcionalidad de diseño y de juego de tus blueprints. Aquí crearás la lógica que indique a los componentes del blueprint cómo comportarse.
La lógica hace referencia a los nodos y las conexiones de un blueprint.
Secuencia de comandos de construcción
Cuando un actor de blueprint aparece en el nivel, ya sea en el visor del editor de niveles o durante la partida, Unreal Engine construye primero sus componentes y luego ejecuta su secuencia de comandos de construcción. También se ejecuta en el editor cuando transformas o cambias una propiedad de un actor, para que veas el resultado inmediatamente en el visor. Se utiliza para realizar acciones de inicialización que configuran el actor de blueprint para la jugabilidad. Estas acciones de inicialización pueden ser específicas del contexto; por ejemplo, aplicar diferentes materiales a un objeto dependiendo del tipo de suelo en el que se coloque.
Si haces clic en la pestaña Secuencia de comandos de construcción de BP_Jumppad, verás un nodo Construction Script que ejecuta una cadena de acciones que configuran el color y otras propiedades de la plataforma de salto cuando aparece (o aparece) por primera vez en el nivel.
Cómo navegar por los grafos de blueprint:
Panorámica: haz clic derecho y arrastra.
Zoom: utiliza la rueda del ratón.
Encuadrar selección: pulsa F para centrarte en los nodos seleccionados.
Ajustar todo: pulsa A para ver el grafo completo.
Ir a: haz doble clic en un nodo de función o evento para encontrarlo en un grafo o en su pestaña de grafo.
Grafo de eventos
El grafo de eventos de un blueprint contiene un grafo de nodos que utiliza eventos y llamadas a funciones para realizar acciones en respuesta a eventos de jugabilidad. Aquí es donde se configuran la interactividad y las respuestas dinámicas. Por ejemplo, un blueprint de luz podría responder a un evento de daño desactivando su componente de luz y cambiando un material.
Toda la lógica del grafo de eventos es una respuesta a algo que ocurre durante la jugabilidad, como responder a la entrada del jugador, activar animaciones o reproducir sonidos. Cada vez que pienses: «cuando esto ocurra, quiero hacer esto», tienes que empezar con un evento.
Un blueprint puede contener varios grafos de eventos que se ejecuten todos como parte del mismo blueprint. Los grafos de eventos múltiples solo se utilizan para organizar la lógica en secciones separadas y no afectan al comportamiento del blueprint.
En la pestaña Grafo de eventos de BP_JumpPad, verás una secuencia de nodos que se ejecutan cuando un actor se solapa con este blueprint, como cuando el jugador camina sobre la plataforma de salto en el juego. Cuando se produce este evento, el blueprint hace que ese actor realice un movimiento de salto, pero con una velocidad mayor de lo normal.
Para encontrar un nodo específico en un grafo, usa el atajo de teclado CTRL + F en las vistas de grafo para buscar un nodo. Por ejemplo, para ver el nodo Event ActorBeginOverlap, usa el atajo de teclado CTRL + F y escribe Event ActorBeginOverlap en el campo de búsqueda. Selecciona el resultado para desplazar la vista a ese nodo.
Un nodo que puede ejecutar (o realizar) acciones tiene un pin de ejecución, también conocido como pin exec, representado por el triángulo blanco del nodo. Si el pin de ejecución de un nodo no está conectado a otro nodo, el triángulo tiene un contorno blanco.
Verás que el nodo Event no tiene un pin de ejecución de entrada. Esto se debe a que un nodo Event se ejecuta tan pronto como el evento definido se activa en el mundo del juego. En este ejemplo, cuando un actor se solapa con el actor de BP_JumpPaden el juego, este evento se activará.
Un nodo también puede tener pines de datos. Por ejemplo, nodo Event ActorBeginOverlap tiene un pin para Other Actor, que es una referencia al objeto de nivel (actor) que se solapa con el objeto de nivel BP_JumpPad. Los pines de datos pasan valores entre los nodos y los pines de ejecución controlan el orden en que se ejecutan los nodos.
El pin de ejecución del nodo Event ActorBeginOverlap está conectado al nodo Cast To Character. Esto significa que cuando un actor en el mundo, como el jugador, se solapa con el actor de la plataforma de salto, este blueprint ejecutará el nodo Cast to Character.
Las conexiones entre los nodos suelen denominarse cables.
Si desconectas el pin de ejecución del nodo Event ActorBeginOverlap del nodo Cast To Character, pero mantienes conectado el pin Other Actor, no pasará nada, ya que los pines de ejecución no están conectados, lo que significa que el nodo Event no activa el nodo Cast To Character.
Para eliminar una conexión o cable, mantén pulsada la tecla Alt y haz clic en ese cable. Arrastra de un pin a otro para conectar un cable.
Para redirigir un cable, haz doble clic en el cable para crear un nodo de reenrutamiento. Coloca el cursor sobre el nodo de reenrutamiento para que cambie a cuatro flechas y, a continuación, arrastra el nodo de reenrutamiento para moverlo.
Para obtener más información sobre cómo trabajar con acciones de nodos en el grafo de eventos, consulta Cómo colocar nodos y Cómo conectar nodos.
Variables
La variables son propiedades que:
O bien mantienen un valor, como una medida de distancia o la velocidad a la que un personaje puede moverse.
O hacen referencia a algo en el mundo, como la malla estática que utiliza un actor.
Puedes configurar las variables para que solo los blueprints puedan acceder a ellas o hacer que se puedan editar en el editor de niveles para que los diseñadores puedan personalizar fácilmente las instancias de blueprint colocadas en un nivel.
En la pestaña Grafo de eventos de BP_JumpPad, observa el panel My Blueprint en el lado izquierdo del editor de blueprints.
En la sección Variables, puedes ver dos variables: Velocidad y Objetivo de color.
Haz clic en la variable Velocidad para seleccionarla. En el panel Detalles, hay varias propiedades relacionadas con esta variable. Al final de la lista, verás la categoría Valor predeterminado, donde puedes establecer el valor de la variable Velocidad.
En este caso, Velocidad se establece en 0, 0, 800. Esto significa que la velocidad que se aplica al jugador es de 800 unidades en el eje Z, o hacia arriba.
Así que, la función de la plataforma de salto dice: «Cuando el jugador pase por encima de esta plataforma de salto, muévelo hacia arriba a 800 cm/segundo».
Si observas las variables de la plataforma de salto, verás que tienen iconos de ojos abiertos junto a ellas. Esto significa que estas variables son variables públicas y editables, lo que las hace editables en todas las instancias de ese blueprint en tu nivel.
Puedes anular los valores predeterminados de una variable editable por instancia desde el editor de niveles sin necesidad de abrir y editar el blueprint.
Para ver un ejemplo de cómo puedes editar variables fuera de un blueprint, sigue estos pasos:
Haz clic en la pestaña de tu nivel cerca de la esquina superior izquierda de Unreal Editor para volver al editor de niveles.
Abre el explorador de contenido y, en la carpeta JumpPad, arrastra el recurso
BP_JumpPadal nivel en el suelo. Asegúrate de que esté seleccionado.En el panel Detalles, busca la categoría llamada Predeterminado. En esta categoría, puedes ver las dos variables que viste antes: Velocidad y Objetivo de color. Son visibles aquí ya que estas dos variables están configuradas como editables en el blueprint (su icono de ojo está abierto).
Vuelve a la pestaña
BP_JumpPad. En la sección My Blueprint > Variables, haz clic en el icono del ojo de la variable Velocidad para que no sea pública ni editable. El ojo abierto cambia a un ojo cerrado.Para aplicar los cambios, haz clic en el botón Compilar en la esquina superior izquierda del editor de blueprints.
La compilación comprueba si hay errores en el blueprint y lo actualiza para que los últimos cambios funcionen en tu nivel.
Vuelve al editor de niveles, selecciona el actor BP_JumpPad y vuelve a mirar en la sección Detalles > Predeterminado. Falta la variable Velocidad porque ya no se puede editar en instancias.
Para restaurar la configuración original de los blueprints, vuelve al editor de blueprints y haz clic de nuevo en el icono del ojo que hay junto a la variable Velocidad.
Haz clic en Compilar y Guardar.
Cuando las variables son públicas y editables, también pueden ser utilizadas por otros blueprints. Por ejemplo, el blueprint de nivel de tu nivel podría acceder y utilizar la variable Objetivo de color de la plataforma de salto para cambiar el color de la plataforma.
Para obtener más información sobre los tipos de variables, cómo crear y editar variables, y cómo hacer referencia a variables en los grafos de blueprint, consulta Variables de blueprint.
Funciones
Las funciones son grafos de nodos que pertenecen a un blueprint determinado y que se pueden ejecutar o llamar desde otro grafo en el blueprint. Las funciones tienen un único punto de entrada designado por un nodo con el nombre de la función que contiene un único pin de salida de ejecución. Llamar a la función desde otro grafo ejecuta la lógica de la función, comenzando con el nodo de entrada de la función.
Al crear clases de blueprint, es posible que quieras reutilizar parte de la lógica del grafo de eventos en varias ubicaciones o incluso en otros blueprints. En lugar de reconstruir la misma lógica en muchos lugares, puedes crear una función en la que añadas los nodos y, a continuación, llamar a esa función desde cualquier blueprint.
Cuando llamas a una función que reside en otro blueprint, la función se sigue ejecutando en el blueprint en el que se creó. La llamada tan solo te da acceso a esa función desde fuera.
Por ejemplo, podrías crear una función HasKey en un blueprint de personaje jugable que toma una llave necesaria, compare esa llave con el inventario del jugador y luego devuelva verdadero o falso. Entonces, otros blueprints (una puerta, un cofre, un personaje PNJ) podrían ejecutar esa función para comprobar si el jugador tiene una llave determinada antes de realizar algún otro comportamiento. Cada uno de estos diferentes objetos de nivel puede reutilizar la lógica de la función HasKey del personaje jugador sin necesidad de recrearla en sus blueprints.
Si te encuentras utilizando el mismo conjunto de nodos más de dos veces en un grafo, considera convertirlo en una función o una macro para poder reutilizarlo.
Para obtener más información, consulta Funciones.
Cómo añadir comentarios a la lógica de blueprint
Puedes añadir comentarios a tus blueprints para crear notas solo visuales que agrupen los nodos y expliquen lo que hace cada parte del blueprint. Los comentarios te ayudan a ti y a los miembros de tu equipo a saber de un vistazo qué función están realizando tus nodos y a mantener los blueprints organizados.
Al compilar la lógica de blueprints, céntrate primero en crear las funciones y luego resalta los nodos que has añadido y añade un comentario que los contenga y describa.
Para añadir un comentario a un blueprint, sigue estos pasos:
Haz clic en el grafo para asegurarte de que es el panel activo.
Pulsa la C en el teclado. Esto añade un cuadro de comentarios.
Haz doble clic en el campo de texto de la parte superior del cuadro para introducir un comentario.
Para cambiar el tamaño del comentario, asegúrate que el comentario esté seleccionado (resaltado con un contorno amarillo) y arrastra un borde o una esquina.
Para agrupar nodos dentro de un comentario, arrastra esos nodos dentro de los límites del comentario.
También puedes seleccionar uno o varios nodos y pulsar C para añadir un comentario que contenga los nodos seleccionados.
También puedes cambiar el color de los comentarios para ayudar a identificar diferentes áreas de tu grafo de un vistazo.
Sigue explorando los blueprints
Ahora que sabes lo básico, sigue aprendiendo sobre los blueprints consultando los temas o tutoriales que aparecen a continuación.