Saltar al contenido
Another Indie Studio

UE4 | Sistema de goles (Blueprint)

Es interesante llenar nuestro videojuego de detalles, curiosidades y elementos que lo llenen de vida. Hoy vamos a aprender cómo hacer un pequeño minijuego que podéis aplicar a vuestros proyectos o crear un juego centrado en esta mecánica.

Para especificar más, vamos a crear una portería con el número de goles encima de esta. Cuando el jugador consiga un gol el número aumentará con la cantidad de goles marcados hasta el momento. Cuando este número llegue a cierta cantidad de goles, que nosotros vamos a decidir, el juego se pondrá en cámara lenta y sonará un sonido a nuestro gusto.

Obviamente, lo que pase después de alcanzar el objetivo de goles, lo podremos modificar a nuestro gusto. Sin embargo hoy vamos a enseñar a hacer lo ya mencionado.

Crear la programación en Blueprint de la portería

Primero, vamos a crear un Blueprint donde importamos la malla de la portería, creamos un trigger que detecte cuando la pelota entra en la portería y por último el número que marca la cantidad de goles.

Para crear el Blueprint, nos colocamos en el “Content Browser“, damos clic derecho -> “Blueprint Class” -> “Actor” y le damos un nombre. Dentro de él tenemos que añadir la malla de la portería, en nuestro caso tenemos los postes y la reja por separado ya que estas cuentan con un pequeño movimiento de viento que explicamos en este articulo.

Añadir modelo de la portería al Blueprint

Para añadir un modelo/malla, debemos colocarnos en la ubicación donde está el modelo en nuestro “Content Browser“, clicamos sobre él y lo arrastramos a nuestro Blueprint.

Crear un trigger para detectar la pelota

Uno de los pasos que tenemos que realizar es crear un trigger. Este va a detectar cualquier movimiento en él, ya sea algún actor entrando, saliendo, y otras interacciones. Para crearlo, clicamos en el botón de ‘Add Component‘, en la esquina superior izquierda, y buscamos ‘Cube‘.

Se va a crear un cubo el cual representa el espacio que va a detectar este trigger. Lo posicionamos en la línea de gol y escalamos a un tamaño el cual no se salga por fuera de la portería, y cambiamos ciertos ajustes. En el panel ‘Detalles’ (ubicado en la parte derecha del editor, generalmente) buscamos el apartado de “Collision” -> “Collision Presets” y de todas las opciones seleccionamos ‘Trigger‘. Un último ajuste que tenemos que hacer a este trigger es desactivar la casilla de ‘Visible‘ para que así no estorbe más (ocultamos visibilidad del cubo).

Incorporar contador de goles en UE4

Por último tenemos que añadir un texto donde se muestren los goles. Para hacer eso, volvemos al botón de “Add Component” y buscamos “Text Render“. En el apartado “Components“, arrastramos el texto encima del trigger para que estos se vinculen y si movemos el trigger se mueva el texto junto a él.

Seguidamente ubicamos el texto en el sitio que nos guste y cambiamos su contenido a ‘0‘ para que cuando inicie la partida se ajuste a ese número.

 

Haciendo que el trigger solo reaccione a la pelota/balón

Para programar el sistema de goles, nos dirigimos al “Event Graph” y desde el nodo ‘Event ActorBeginOverlapcreamos un ‘Cast to + (el nombre de nuestra pelota)‘. De esta forma evitamos que cuente como gol cuando entre otro actor que no sea la pelota y finalmente conectamos el ‘Other Actor‘ del ‘Event ActorBeginOverlap‘ al ‘Object‘ del ‘Cast to + (el nombre de nuestra pelota)‘; tal y cómo se muestra en la siguiente imagen.

Creando una variable que cuente los goles marcados en Unreal Engine 4

Posteriormente hecho el Cast, tenemos que crear una variable que acumule el número de goles marcados hasta el momento.

Para ello, nos dirigimos al panel inferior izquierdo llamado “Variables“, damos clic al ‘+‘, le damos un nombre (en nuestro caso “goal“) y cambiamos su tipo a “Integer“.

Programando el sistema de goles – Aumento de valor (Integer)

Debemos arrastrar la variable recién creada encima del pin de salida del ‘Cast to + (el nombre de nuestra pelota)‘. Esto va a crear un nodo llamado ‘Set‘ que ajustará la variablegoal” con el valor que le sumemos, restemos o especifiquemos.

Volvemos a arrastrar la variable, pero esta vez en un sitio vacío del gráfico. Nos va a dar dos opciones: ‘Get‘ o ‘Set‘. ElegimosGet‘ y creamos un ‘Integer + Integer‘, conectamos este nodo alSet‘ y ya estaríamos sumando1‘ a la variable cada vez que la pelota entre.

En nuestro caso, se añade 1 ya que es el número que hay puesto por defecto en el ‘Integer + Integer‘. En el caso de que queramos que se sumen más “goles” cada vez que marcamos, modificamos el valor a nuestro gusto.

Sin embargo, aún no se modifica el texto que colocamos encima de la portería ya que este no está vinculado a la variable. Vamos a ver cómo se hace.

Programando que el texto del BP se modifique en tiempo real

Para hacer que el texto se modifique y marque los goles en tiempo real, vamos a crear un ‘Set textdesde el ‘Set‘ de la variable. Este nos va a pedir un ‘Meta‘ (el cual especificará qué texto modificamos) y un ‘Value‘ (el cual determinará qué texto se va a mostrar).

Después, vamos a seleccionar el texto que hemos creado en el Blueprint desde la pestaña “Components” y lo arrastramos encima del pin de entrada ‘Meta‘. Así automáticamente se creará una referencia al texto. Y para ajustar el ‘Value‘, simplemente desde el pin de salida verde del ‘Set‘ de la variable, lo conectamos al pin de entrada ‘Value‘.

Esto va a crear un nodo intermedio el cual convertirá el valor de la variable a un texto.

Hecho esto, ya tendremos el sistema completo. Cada vez que la pelota entre en el trigger de la portería, el texto de los números aumentará sumando la cantidad que hayamos elegido.

Sin embargo, si lo dejamos así, va a sumarse infinitamente y no va a haber ningún tipo de celebración, así que a partir de aquí vamos a enseñar tres cosas:

  • Hacer que suene un sonido personalizado al marcar gol.
  • Que al llegar a cierta cantidad de goles la cámara se ponga en cámara lenta durante el tiempo que escojamos
  • Que al llegar a esa cantidad se reinicie el contador de goles.

Estos añadidos son meramente decorativos menos el último que es esencial si deseamos que se reinicie el contador. Sin embargo el sistema ya funciona totalmente y estos elementos no son necesarios para su funcionamiento.

Añadiendo un sonido al anotar gol

Esto es lo más fácil de todo, ya que solo debemos añadir un nodo llamado ‘Play Sound 2D‘ a partir del ‘Set text‘. Seleccionamos el audio que queramos que suene y se reproducirá correctamente cuando el balón entre en la portería.

Cámara lenta al cumplir objetivo de puntos

Para hacer que la cámara cree este efecto, vamos a crear un ‘Branchdesde el último nodo creado hasta el momento.

Después, creamos otro ‘Get‘ de la variablegoal” (explicado anteriormente cómo crearlo) y de este añadimos un ‘Equal (integer)‘ (el cual va a detectar si el valor de esa variable es igual al que escojamos en el nodo). De aquí, lo conectamos con el pin de entrada ‘ConditiondelBranch‘ anteriormente creado, haciendo que el valor la variable se convierta en la condición del branch.

Debemos ajustar el ‘Equal (integer)‘ a la cantidad de anotaciones en las que queremos que se ralentice el tiempo, así que modificamos su valor. Hecho esto, al llegar al objetivo de goles elegido, se dejará continuar con el proceso de nodos.

Para hacer que se ralentice el tiempo, vamos a crear un nodo seguido del ‘Branch‘, este se llama ‘Set Global Time Dilation‘, que como su nombre indica, va a ajustar la velocidad en la que se mueve todo el juego. En nuestro caso le damos un valor de ‘0.3‘, el cual es cámara lenta; siempre teniendo en cuenta que podemos modificar a nuestro gusto este número.

A continuación creamos un ‘Delay‘ (nodo que creará un retraso del tiempo elegido antes de seguir reproduciendo los demás nodos). Este delay lo ajustamos al tiempo que queramos que dure la cámara lenta, en nuestro caso ponemos1.0‘ (1 segundo).

Finalmente para que vuelva a la normalidad, volvemos a crear un ‘Set Global Time Dilation‘ y lo ajustamos a ‘1.0‘, que representa la velocidad de juego normal.

Reiniciar el contador de goles al cumplir el objetivo

Aviso: Si no seguiste el apartado anterior (Cámara lenta al cumplir objetivo de puntos) porque no era de tu agrado o necesidad, es necesario añadir y configurar los nodos hasta la primera imagen del apartado. Si no se añaden esos bloques, no será posible detectar cuándo se cumple el objetivo máximo de goles.

Para hacer esto es tan fácil como volver a añadir el nodo de ‘Set‘ de la variable. Simplemente vamos a cambiar el valor numérico de este bloque, al que queramos que aparezca cuando cumplamos la meta de anotaciones (en el caso del vídeo usamos el valor numérico ‘0’).

Por último creamos un ‘Set text‘. El ‘Meta‘ lo conectamos a la referencia del texto del Blueprint y el ‘Value‘ lo conectamos con el ‘Set‘ de la variable.

Con esto listo, ya tenemos nuestro sistema de goles para usar en nuestros proyectos.

Si necesitáis ayuda en algún paso o algo no funciona cómo lo esperado, tenéis este vídeo-tutorial de referencia: