Motor Unreal Engine 4 Libretos Visuales (Visual Scripting)
Motor Unreal Engine 4 Libretos Visuales (Visual Scripting)
7. Bibliografía
Motor Unreal Engine 4 Libretos visuales (Visual Scripting) | 3
Objetivos Este lenguaje visual fue creado por Epic Games para
Unreal Engine 4 y se utiliza en el Editor de Unreal para
• Conocer la filosofía del sistema Blueprint. crear nuevas clases y funcionalidades de gameplay. Un
script en Blueprint es representado por grafos de nodos
• Crear clases Blueprint.
conectados por cables que definen el flujo de ejecución,
• Identificar la interfaz del Editor Blueprint. “al conectar nodos, eventos, funciones y variables con
• Utilizar nodos, pines y cables para crear grafos de cables, es posible crear elementos de juego complejos”
nodos. (Epic Games, s. f.). La palabra Blueprint también se utiliza
• Reconocer el concepto de debugging, así como los para referirse a un objeto del juego creado utilizando
elementos que lo posibilitan. Blueprint. En la figura 1 puede verse un ejemplo de
Blueprint que recoge el input del jugador.
• Crear distintos tipos de variables y utilizarlas en
grafos de nodos.
• Emplear los operadores aritméticos, relacionales y
lógicos para operar sobre variables.
• Aplicar nodos de control de flujo.
Filosofía de los
Blueprints y el Visual
Scripting
Como se vio en el tema anterior, Unreal Engine 4 trabaja
en el lenguaje de programación C++, pero, además,
dispone de un sistema de programación visual, el
sistema Blueprint. Como se recoge en la documentación
de Unreal Engine: Figura 1. Blueprint de recogida de input.
• Object: la clase base para los objetos en Unreal También es posible crear clases Blueprint basadas
Engine. Todas las demás clases son clases hijas de en actores que se han colocado en el nivel. Para
la clase Object. hacerlo, simplemente, se selecciona el actor en el
• Actor: la clase base usada para objetos que pueden nivel y se hace clic en el botón azul Blueprint/Add
colocarse o spawnearse en un nivel. script que aparece en el panel de detalles del editor
de nivel. De esta manera, la clase del actor será
• Pawn: un peón es un actor que puede ser "poseído"
utilizada como clase padre del nuevo Blueprint.
y recibir información de un controlador.
• Character: un character es un peón que incluye la Interfaz del editor Blueprint
capacidad de caminar, correr y saltar, entre otras.
Para abrir el editor de Blueprint sencillamente debe
• PlayerController: es un actor responsable de
hacerse doble clic en un Blueprint o clic derecho sobre
controlar un peón usado por el jugador.
él y clic en “Edit…”. En la figura 3 se pueden ver las partes
• Game Mode: define el juego, sus reglas, puntuación principales del Editor Blueprint.
y otras facetas del tipo de juego.
• Panel Details Cuando se ejecuta un nodo con pin de datos, este extrae
El panel de detalles muestra las propiedades del el dato requerido usando los cables de datos antes de
elemento seleccionado de la clase de Blueprint, que completar su ejecución. En la figura 5 se puede ver cómo
puede ser una variable, función o componente. la ejecución comienza en el evento BeginPlay y el nodo
Print String obtiene el valor de la variable Player Name a
• Viewport
través del cable de datos (rosa).
El Viewport contiene la representación visual de
los componentes que forman parte del Blueprint,
que pueden ser manipulados utilizando los widgets
de transformación de la misma manera que en el
editor de nivel.
• Event Graph
En el Event Graph es donde aparece la lógica del
gameplay que determina el comportamiento de
la clase Blueprint durante el mismo, conteniendo
eventos y acciones representados por un grafo de Figura 5. Evento BeginPlay en el que se muestra el nombre del player.
nodos.
En el caso de una función recursiva (auto- Message Log y Nodo Print String
llamada), el mismo nombre de función Estos dos elementos son realmente útiles a la hora de
puede aparecer varias veces seguidas depurar un proyecto. En la pestaña Message Log se
ven distintos errores que pueden tener lugar durante la
(Epic Games, s. f.). ejecución, mostrándose el error o problema que ha tenido
lugar, así como el Blueprint, Event Graph y Nodo en que
ha ocurrido, también se puede hacer clic en ellos para
En la figura 9 puede verse una pila de llamadas. acceder de forma rápida a su ubicación. Por su parte, el
nodo Print String, que puede verse en la figura 11, permite
imprimir una cadena de texto al log y/o a la pantalla.
Tipos de variables El operador “+” recibe dos valores input por la izquierda y
saca el resultado de la operación por la derecha. Pueden
Las variables se utilizan para almacenar valores y añadirse más valores haciendo clic en la opción Add pin.
atributos en Blueprints que pueden modificarse durante Los valores de input pueden introducirse directamente
la ejecución del juego y pueden ser de distintos tipos. en los nodos u obtenerse de variables.
Una variable se crea desde el panel My Blueprint, en • Operadores relacionales
el Blueprint Editor, haciendo clic en el botón “+” en la
categoría Variables. Los operadores relacionales llevan a cabo una
comparación entre dos valores y devuelven un valor
Los tipos más comunes de variables son los siguientes: booleano (true o false) como resultado de la comparación.
En la figura 13 puede verse un ejemplo de su uso con un
• Boolean: usada para contener el valor true o false. nodo Branch.
• Integer: usada para almacenar valores enteros.
• Float: usada para almacenar valores reales.
• String/Text: usada para almacenar texto. La variable
texto es preferible puesto que soporta posición.
• Vector: usada para almacenar valores float X, Y y Z.
• Transform: usada para almacenar posición,
rotación y escala. Figura 13. Asignación de valor a la variable HigestScore.
Cuando se selecciona una variable, sus propiedades se Al final del juego, la puntuación del jugador actual
muestran en el panel Details, en el que pueden hacerse (almacenada en la variable Score) se compara con la
cambios a su nombre y tipo, pudiendo crear un array de puntuación más alta guardada (variable HighestScore).
variables de ese tipo marcando el botón que aparece Si la puntuación del jugador es más alta, el valor de la
junto a la propiedad Variable Type. Además, pueden variable Score es almacenado en la variable HighestScore.
modificarse otras propiedades.
• Operadores lógicos
Cuando una variable se arrastra y suelta en el Event
Graph, aparece un menú contextual con las opciones Get Los operadores lógicos llevan a cabo una operación
y Set. entre valores booleanos y devuelven un valor booleano
(true o false) como resultado de la operación. Estos
• Los nodos Get se usan para leer el valor de la operadores son:
variable, siendo el atajo de teclado para su creación
Ctrl. • OR: devuelve el valor true si alguno de los valores
de input es true.
• Los nodos Set se usan para almacenar un nuevo
valor en la variable, siendo el atajo de teclado para • AND: devuelve el valor true solo si todos los valores
su creación Alt. de input son true.
• NOT: recibe solo un valor de input y devuelve el
Operadores resultado inverso.
• Operadores aritméticos En la figura 14 se puede ver un ejemplo de una simple
En los Blueprints pueden utilizarse operadores decisión de un enemigo en un juego.
aritméticos para crear expresiones matemáticas. En la
figura 12 puede verse una simple expresión que añade
el valor “10” a la variable actual Score, después asigna el
nuevo valor calculado a la variable Score.
Nodos Switch Figura 16. Nodo ForLoop que muestra por pantalla los valores del 1 al
10.
Un nodo switch lee un dato de input y, basándose en
su valor, envía el flujo de ejecución fuera de la salida
de ejecución predeterminada. Existen varios tipos de • Nodo Sequence
conmutadores disponibles: Int, String, Name y Enum Un nodo Sequence se puede utilizar para
(Epic Games, s. f.). organizar otras acciones del Blueprint. Cuando se
Cuando se añade un nodo switch, el único pin de salida desencadena, ejecuta todos los nodos conectados
es el pin Default, que puede eliminarse haciendo clic a los pines de salida en orden secuencial (Epic
derecho sobre él. Haciendo clic en Add pin se pueden Games, s.f.).
añadir más pines de salida para cubrir las distintas • Nodo WhileLoop
circunstancias que se requieran. Un nodo WhileLoop está formado por un pin de
entrada que contiene una condición a evaluar y
Nodos estándar de control de un Loop Body con las acciones que llevará a cabo.
Este nodo evalúa la condición de entrada para
flujo determinar si es true y ejecuta las declaraciones de
Además de los nodos Switch, existen otros nodos su Loop Body, así hasta que la condición sea false,
que hacen posible llevar a cabo un control del flujo de momento en que deja de ejecutar las declaraciones
ejecución. de su cuerpo y la ejecución continúa por el pin de
salida Completed (Epic Games, s. f.).
• Nodo Branch
• Otros nodos
El nodo Branch dirige el flujo de ejecución de un Blueprint
basándose en el valor de un input booleano Condition, Existen otros nodos de control de flujo que pueden
que puede ser true o false. A modo de ejemplo, en la utilizarse en los Blueprints, como los nodos
figura 15 se puede ver un nodo Branch que usa como DoN, DoOnce, FlipFlop, ForLoopWithBreak, Gate
condición el valor de una variable booleana, llamada y Multigate, sobre los cuales puede encontrarse
SuperCoin. Si el valor es true, la ejecución continuará por información en la documentación de Unreal Engine.
el pin true, si es false continuará por el pin false.
Resumen
Se ha comenzado el tema conociendo la filosofía del
sistema Blueprint, el sistema de programación visual
de Unreal Engine 4, un sistema completo de secuencias
de comandos de juego basado en el concepto de usar
una interfaz basada en nodos para crear elementos de
juego desde Unreal Editor. También se han conocido
los principales tipos de Blueprints y cómo crear clases
Blueprint. Además, se ha conocido a fondo la interfaz del
Editor Blueprint, así como el concepto y funcionamiento
Figura 15. Nodos para la recogida de monedas. de nodos, pines y cables.