viernes, 19 de marzo de 2021

Biblioteca de blueprint

Blueprints es el lenguaje visual que fué creado por Epic game para Unreal Engine que funciona a partir de nodos

Clases de Blueprint

Level Blueprint: Es un código que solo pertenece al nivel

Class: Son para cualquier tipo de objeto, información o variable que quiera representar un Blueprint. Usada para crear objetos interactivos dentro del juego que se puedan reusar en cualquier lugar.

Relación entre objeto, actor y componente de actor

Cuando se crea un nuevo Blueprints se debe definir la clase a la que proviene. Las clases tienen un concepto que se denomina herencia y para ello los tres conceptos vitales son:

1. Objeto: Es la clase base. Es la representación real

2. Actor: Es cualquier objeto dentro de la escena, que pueda verse o ponerse en el nivel

3. Componentes de Actor: Dentro de los actores tenemos los componentes de los actores

Ejemplo si tenemos una clase "Vehículo" el objeto sería el carro deportivo, el actor es cuando lo tenemos dentro de la escena y los componentes serían las diversas cosas que lo componen, por ejemplo, las ruedas, los frenos, los asientos, etc.

Cuando creas un Blueprints escoges una clase. Nos aparecen las primeras opciones, y en "All Classes" el resto que tenemos para elegir. La más común es "Actor"

Instancias

Las instancia de una clase son el mismo objeto pero duplicado sin dejar de ser la misma malla

Si arrastras un Blueprint lo que creas es una instancia

Ejecución de un código

La ejecución de los nodos comienza en un evento "rojo" que tiene un cable blanco saliendo de un "whithe pine". Las líneas blancas son el flujo de la información y el "white pine" es la dirección a donde está yendo la ejecución del código.
Por ejemplo en Event Beginplay no existe ni el "energy" ni el "lives" hasta que pase por esos nodos

Data Wires

Todo lo que no es ejecución como tal. Éstos tienen distintos colores dependiendo del tipo de datos.
Rojo es variable tipo boleana, verde es tipo flotante, amarillo es un vector, lila rotación, azul es un actor

Las variable: Se usan para almacenar atributos en los Blueprints. Tenemos

Bolean: Solo puede usar valor "verdadero" o falso"
Integer: Números enteros
Float: Puede usar números con decimales
String/Text: Almacena lo que es texto 
Vector: Contiene X, Y y Z
Transform: Contiene locación, escala y rotación

Cuando arrastramos una variable tenemos dos opciones: 
Get Base TurnRate: No modificable. Es para leer el valor de la variable
Set Base TurnRate: Se puede cambiar el valor de la variable
Para arrastrar rápidamente presionamos Ctrl


Contenedores

Las variables tienen 4 tipos de contenedores

Array: Es una lista ordenada de variables. Usando "Addunique" podemos agregar nuevas variables a la variable inicial 

Set:
Es una lista no ordenada. No se puede repetir un valor o duplicar numero
Map: Sirve para tener un diccionario

Operadores

Operadores Aritméticos
Son las operaciones matemáticas, sumas, restas, multiplicación, división, etc. 
Aquí la puntuación irá sumandose en 50. El score es una variable tipo entero, por lo tanto cuando agreguemos una operación matemática como la suma simplemente buscamos el integer+integer

Operadores Relacionales
Es para entender un valor en base a otro. El resultado de estos pueden ser negativo o positivo 

Operadores Lógicos
Esto junto lo que son condiciones sobre condiciones. Realizan una operación entre valores booleanos y devuelven un valor booleano. Tenemos tres operadores:
AND "Y": Devuelve un valor verdadero solo si los valores de entrada son verdaderos
OR "O": Devuelve un valor verdadero si uno de los valores de entrada es verdadero
NOT: Recibe solo un valor de entrada y el resultado será el valor inverso

En el ejemplo tenemos que si la munición es baja (verdadero) y el jugador está cerca (verdadero) entonces el enemigo decide huir (RunAway)

Las funciones

Son lo que permite que un conjunto de acciones que se ejecuten en varias partes del blueprints se recopilen en un solo lugar para facilitar la organización del script.
Desde aquí podemos crear una nueva función.

Tenemos los parámetros de entrada para pasar valores a una función y parámetros de salida para devolver valores de una función. Desde aquí podemos crear las entras y las salidas

Cuando creamos las salidas automáticamente se crea un nodo de retorno


Entonces después podemos agregar esta función con el nombre creado, sus salidas y entrados con la operación configurada un solo nodo

Parámetro Target

El target indica el objeto que se modificará en la función. El valor predeterminado es "self" que significa uno mismo, es decir el actor principal. Por ejemplo la función "DestroyActor" tiene por defecto Self lo que significa destruir al actor principal. Pero podemos conectar otro objetivo 

Custom Events

Son los eventos personalizados. Con botón derecho podemos buscar "Add Custom Event"

Y tiene las mismas opciones que una función solo que no tiene salidas. El nodo rojo es el nodo "Custom Events", le podemos cambiar el nombre, igual a la entrada que creemos. En este caso creamos una entrada con variable de texto. Entonces salimos de esa entrada y en este caso agregamos la función print para imprimir un texto

Para ejecutar usaremos pro ejemplo la función "saltar", entonces saliendo del pin blanco podemos encontrar nuestro custom event buscándolo con el nombre que usamos "imprimir texto", entonces escribimos el texto que queremos que se imprima cuando el personaje salte 



Delegates 
Un evento tiene un pequeño cuadro rojo en la esquina superior derecha que se denomina "delegado".
En la imagen de la derecha, el delegado del evento personalizado llamado "Reloj" está conectado a la configuración del temporizador mediante el pin de entrada de evento del nodo de evento, por lo que el evento del reloj se llamará cada segundo

Macros
Macro es una forma de agrupar códigos que en el momento de la compilación, las acciones se expanden en los lugares donde se utiliza la macro. No tienes que compilar aparte




Diferencias entre Macros, Eventos y funciones

Las macros tienen parámetros de salida y pueden tener muchas rutas de ejecución. No se pueden llamar desde otro Blueprint. 

Los eventos no tienen parámetros de salida. Se pueden llamar desde otros Blueprints y tienen la referencia de “delegado”. Apoyan las líneas de tiempo. 

Las funciones se pueden llamar desde otros Blueprints y tienen parámetros de salida. Las funciones no admiten acciones latentes, como la acción Delay.

Program Flow

Branch Node
Lo que hace es dirigir el flujo de ejecución de un Blueprint basado en el valor de la entrada booleana "Condición", que puede ser "verdadera" o "falsa".
En otras palabras, cuando el flujo entra por el branch saldrá por True si la condición se cumple y por el False si la condición no se cumple, y la condición es la que hemos definido entrando por el booleano

For Loop Node
Es una manera de darle vueltas a un loop, que es algo que se va repitiendo cada vez que se cumple una condición. 
Por ejemplo si usamos numeros, cuando nuestro Index que va a comenzar en el menor número (First Index) y cada vez que el loop termine se irá incrementando hasta llegar al numero 10 que esl numero mayor (Last Index), y ya completando seguirá en la salida "completed"

Sequence Node

Si tenemos una secuencia de flujo muy larga, este nodo es muy útil. Aquí vemos un ejemplo claro, de secuencia de texto, La tercera secuencia la continuamos a bajo en la salida "Then 1" en vez de seguir a la derecha continuamente 

Componentes

Son programas o clases que están dentro de Unreal listo para usar dentro del Blueprints

Si creo un Blueprints tipo "actor" veremos que tiene una esfera en su previsualización, y si arrastramos ese Blueprints al escenario veremos esa esfera, pero si damos play ésta no la veremos, y es porque aquella esfera es simplemente una representación visual



En el Bluepritns del ThirdPersonCharacter que tenemos por defecto podemos ver todos sus componentes

Construction scripts

Es una función especial que realizan todos los planos de actor cuando el plano se agrega por primera vez al nivel, cuando hay un cambio en sus propiedades o cuando la clase se genera en tiempo de ejecución. El Script de Construcción tiene un gráfico separado donde se pueden ubicar las acciones a realizar. Es importante tener en cuenta que el guion de construcción no se ejecutará en los actores colocados cuando comience el juego

Aquí tenemos dos componentes en el Blueprint

Aquí lo podemos ver en el escenario, igual que al ejecutar el juego

Luego Si vamos al construction Script podemos modificar los componentes como por ejemplo la luz arrastrando el Spotlight y usando el "Ajustar color d eluz"

El construction script, a diferencia de Event Beginplay cambia los componentes a la hora de la edición

Eventos

Es lo que nos permite la comunicación entre los actores

Event BeginPlay
Es cuando comienza el juego. Por ejemplo para mostrar un texto ("Hello") si usamos el flujo desde el Event BeginPlay un Delay sería esperar (2 segundos, en este caso) para imprimir el texto contando desde el inicio dle juego

Event Tick
El tick corresponde a cada fotograma por segundo. Si el juego se ejecuta a 60 fps, entonces el Event tick se llama 60 veces por segundo. Si conectamos imprimir texto...

...veremos como el texto se imprimir 60 veces pro segundo

Events Collision

Esto eventos funciona cuando hay una colisión. Tenemos varios.
Event ActorBeginOverlap y Event ActorEndOverlap
Por ejemplo si tenemos un objeto en modo de colisión "OverlapAll" que significa que traspasará el objeto, uno servirá para llamar al evento en entrada y el otro para salida. Aquí tenemos el ejemplo con texto

Aquí vemos el mensaje que genera tanto entrada como salida

Event Hit: se ejecutará si la propiedad Generar eventos de golpe de Simulación de uno de los actores de la colisión se establece en "true".

Mouse Interaction

Hay algunos eventos relacionados con la interacción del ratón con un actor. 
Event ActorBeginCursorOver se llama cuando el cursor del mouse se mueve sobre el actor. 
Event ActorEndCursorOver se llama cuando el cursor del mouse se mueve fuera del actor. 
Event ActorOnClicked se llama cuando el mouse hace clic en el actor. 
Event ActorOnReleased se llama cuando se libera el botón del ratón y el cursor del ratón todavía está sobre el actor

Player Input

Sirve para meter información a los controles.

Input Mappings
En lugar de crear un evento de entrada para el botón izquierdo del ratón que activará un arma, es mejor crear un evento de acción llamado "Fire" y asignar todas las teclas y botones que pueden desencadenar este evento. Para acceder a las asignaciones de entrada vamos al menú Editor de niveles, luego a Editar > Configuración del proyecto y en la categoría Motor seleccione la opción Entrada.


Si desplegamos un Action mappings que tenemos pro defecto (El Jump) podemos ver un botón designado par distintos tipos de controles

En el blueprint podemos agregar el nodo de cualquiera de los "Eventos de acción"

Aquí tenemos el botón precionado y soltado, con lo cuál dirigimos elf lujo a la acción correspondiente 

Action Mapping

Se basa en controles basados en ejes o coordenadas de posición


Classes

Al crear un Blueprint, se le presentará una lista de las clases que se utilizan comúnmente como la clase principal del Blueprint. Estas clases comunes son parte del marco de juego y se utilizan para representar jugadores, personajes, controladores y reglas del juego. La imagen de la derecha muestra la jerarquía de las clases comunes. La flecha indica que la clase de la derecha hereda de la clase de la izquierda. Hay una clase base en Unreal llamada clase Object.


Game Mode
Si vamos a "ajustes de proyecto" y a mapas y modos. Aquí podemos ver el GameMode por default y desplegamos el set de clases

Nodo Cast: Sirve para cualquier referencia a cualquier tipo de objeto. Se puede usar como si de otro objeto se tratara. Comúnmente se utiliza cuando objetos derivan de otros objetos






No hay comentarios:

Publicar un comentario