Antes de empezar
Asegúrate de que has hecho lo siguiente:
Instalar de Unreal Engine y configurar Visual Studio para Unreal Engine
Aprender sobre los proyectos y actores, y a navegar por Unreal Editor
Empezar desde una plantilla
Este tutorial comienza con un proyecto basado en blueprints que contiene recursos de muestra. Irás añadiendo código que replica y amplía la funcionalidad ya existente en el blueprint poco a poco. De esta forma, puedes aprender a crear nuevas clases en un proyecto C++ nuevo y, al mismo tiempo, disponer de los blueprints equivalentes como referencia.
Para crear un nuevo proyecto de juego a partir de una plantilla, sigue estos pasos:
Abre Unreal Engine. En el explorador de proyectos de Unreal Engine, ve a la categoría de proyecto Games y selecciona la plantilla First Person.
En Valores predeterminados del proyecto, mantén el tipo de proyecto establecido en Blueprint. Esto implica que Unreal Engine creará un proyecto con recursos predeterminados de tipo blueprint en lugar de recursos de C++.
En Variante, selecciona Arena Shooter.
Dale un nombre al proyecto. Este tutorial utiliza el nombre de proyecto
AdventureGame.Haz clic en Crear para abrir tu nuevo proyecto en el editor.
Verificar Enhanced Input
Con el sistema de entradas mejorado, puedes controlar el movimiento del personaje creando acciones de entrada personalizadas que definen las acciones que puede realizar tu personaje, como saltar o agacharse. Cada acción de entrada existe como un recurso de datos al que puedes hacer referencia en el código para establecer comunicación entre tu código y tu personaje.
Más adelante en este tutorial, combinarás acciones de entrada y código para que tu personaje pueda moverse y mirar a su alrededor.
El sistema de entradas mejorado ya debería estar activado en tu proyecto. Para verificarlo, sigue estos pasos:
En el menú principal de Unreal Editor, ve al menú Editar y selecciona Complementos.
Busca Enhanced Input. Deberías ver el complemento instalado y habilitado.
Si quieres más información sobre el sistema de entradas mejorado y las acciones de entrada, consulta Enhanced Input.
Creación de una clase de modo de juego C++
Tu proyecto basado en blueprints no tiene archivos C++ ni proyectos de Visual Studio (VS) con los que trabajar. A continuación, vas a crear tu primera clase y a introducir C++ en tu proyecto. Para empezar, crea una clase de modo de juego personalizada, la cual indica a Unreal Engine que genere el proyecto de Visual Studio y los archivos que necesitas para empezar a programar. Tu clase personalizada se deriva de la clase padre AGameModeBase.
Los recursos de modo de juego definen las reglas de un juego, las condiciones de victoria y los personajes que se utilizan. El modo de juego también establece las clases predeterminadas del marco de jugabilidad que usa tu proyecto, incluidos el peón, el PlayerController y el HUD. Más adelante en este tutorial, utilizarás el modo de juego para cambiar el personaje jugable por defecto.
Para crear una nueva clase de modo de juego en C++, sigue estos pasos:
En el menú principal de Unreal Editor, ve a Herramientas > Nueva clase de C++.
En la ventana Elegir clase padre, busca y selecciona Game Mode Base y haz clic en Siguiente.
Introduce un nombre para la nueva clase y clic en Crear clase. Este tutorial utiliza
AdventureGameMode.Aparecerán dos mensajes de advertencia indicando que tendrás que compilar tu proyecto desde VS al menos una vez antes de que las clases de C++ aparezcan en el explorador de contenido. Haz clic en Aceptar y luego en Sí en la segunda advertencia para abrir tu código.
Construye tu proyecto
Antes de empezar a añadir código, termina de preparar tu entorno compilando tu proyecto en VS y actualizando Unreal Editor.
Abrir el proyecto en Visual Studio
Si el motor no te ha pedido automáticamente que abras tu proyecto en VS después de crear la clase de modo de juego, en el menú principal de Unreal Editor, ve a Herramientas y selecciona Abrir Visual Studio.
También puedes buscar el archivo .sln de tu proyecto que está en /Documentos/Unreal Projects/[ProjectName] por defecto.
Unreal Engine realiza un seguimiento de los cambios que realizas en tu proyecto, como añadir nuevas clases, módulos, complementos o modificar los ajustes de compilación. Sin embargo, es posible que los archivos del proyecto en VS no reflejen automáticamente estas actualizaciones. Utiliza Actualizar proyecto Visual Studio (también en el menú Herramientas) para regenerar los archivos de solución y del proyecto según el estado actual del proyecto, de modo que todo esté al día.
Cuando abras Visual Studio, verás los archivos de tu proyecto organizados en el explorador de soluciones.
En el explorador de soluciones, expande Games > [ProjectName] > Source > [ProjectName]. Aquí se encuentran los archivos principales de tu juego, incluidos dos archivos correspondientes a tu nuevo modo de juego, [GameModeName].cpp y [GameModeName].h.
Compilar el proyecto y actualizar Unreal Editor
Para que Unreal Editor reconozca tu proyecto de código e incluya tus clases de C++ en el explorador de contenido, compila tu proyecto desde VS y reinicia el editor.
Para compilar tu proyecto de forma que sus clases aparezcan en Unreal Editor, sigue estos pasos:
En el explorador de soluciones, ve a Games > [ProjectName], haz clic derecho en tu proyecto y selecciona Compilar.
Cuando se haya completado la compilación, vuelve a Unreal Editor y comprueba si ha aparecido el botón Compilar en la barra de herramientas inferior y si ha aparecido una nueva carpeta Clases C++ en el explorador de contenido.
Si aún no han aparecido, cierra el editor y vuelve a abrir el proyecto. Al abrir el editor, tu proyecto se recompila y se indica a UE que tus clases C++ existen. Si Unreal Engine te pide que recompiles tu proyecto, haz clic en Sí.
Deshabilitar la codificación en directo
Antes de volver a compilar el código, desactiva la codificación en directo en Unreal Editor. La codificación en directo permite cambiar y recompilar código C++ en archivos de implementación (.cpp) mientras el motor se está ejecutando; sin embargo, sigue un proceso de trabajo de compilación diferente y puede generar errores al editar archivos de cabecera (.h) o al intentar compilar desde Visual Studio. La codificación en directo es útil para iterar una base de código desarrollada, pero recomendamos desactivarla al iniciar un nuevo proyecto.
Para desactivar la codificación en directo, en la barra de herramientas inferior del editor, haz clic en los tres puntos junto al botón de compilación y deshabilita Activar codificación en directo.
Extensión de una clase de C++ a blueprints
Ahora que has creado tu propio modo de juego personalizado, extiéndelo a los blueprints para mostrar sus propiedades al editor y, a continuación, establece ese nuevo blueprint como el modo de juego por defecto del proyecto.
Extender tu clase de modo de juego a los blueprints expone los valores de la clase directamente al editor en lugar de hacerlo todo a través del código. El blueprint actúa como subordinado de la clase de C++ y hereda todas las funciones de la clase.
Para derivar un recurso de blueprint a partir de tu clase GameMode, sigue estos pasos:
En el árbol de recursos del explorador de contenido, ve a Clases C++ > [ProjectName] para buscar las clases de C++ que has creado.
Haz clic derecho en tu clase de modo de juego base y selecciona Crear clase de Blueprint basada en [GameModeBaseName].
En la ventana Añadir clase de Blueprint, nombra tu blueprint con el prefijo
BP_para poder identificarlo más adelante. Este tutorial utilizaBP_AdventureGameMode.En la ruta, selecciona Todo > Contenido > FirstPerson > Blueprints, y, a continuación, haz clic en Crear clase.
Unreal Engine abre automáticamente el blueprint en una nueva ventana del editor de blueprints.
Puedes anclar la nueva ventana a la ventana principal del editor arrastrando la pestaña del blueprint a lado de la pestaña del mapa (Lvl_FirstPerson) en la ventana principal del editor.
Cómo cambiar el modo de juego del proyecto
Por defecto, los nuevos proyectos de Unreal Engine usan un modo de juego de muestra. Para convertirlo en tu modo de juego personalizado, edita los ajustes del proyecto.
Para cambiar el modo de juego por defecto, sigue estos pasos:
En el menú principal del editor, ve a Editar > Configuración del proyecto.
En la sección Proyecto del panel izquierdo, selecciona Mapas y modos.
En la parte superior de la tabla de ajustes, cambia el Modo de juego predeterminado al modo de juego de tu Blueprint.
Cierra Configuración del proyecto.
En el menú principal, ve a Ventana > Configuración del mundo. De forma predeterminada, el panel Configuración del mundo aparece acoplado junto al panel Detalles. Esta configuración controla cómo se comporta el nivel actual.
En la sección Modo de juego, configura Anulación de modo de juego con tu nuevo blueprint de modo de juego.
Solo tienes que cambiar la opción Anulación de modo de juego para cualquier nivel de muestra. Si creas un nuevo nivel en blanco, la opción Anulación de modo de juego se establece en Ninguna de forma predeterminada.
Añadir un mensaje de depuración en pantalla
Una forma genial de empezar a añadir código a tu proyecto es añadiendo en pantalla un mensaje tipo “Hello World!”.
Añade un mensaje de depuración para verificar que estás usando tu nuevo modo de juego en lugar del mensaje por defecto que proporciona Unreal Engine. Los mensajes de registro y de depuración son útiles para verificar y depurar el código durante el desarrollo.
Cómo anular la función por defecto StartPlay()
AGameModeBase incluye una función StartPlay() a la que UE llama cuando el juego está listo para iniciar el juego. Normalmente, anularás esta función en tus clases GameMode personalizadas para añadir lógica de inicio de juego global. Aquí, se anulará para que aparezca un mensaje de depuración cuando se inicie el juego.
Para anular StartPlay() en tu clase GameMode personalizada, sigue estos pasos:
En VS, abre el archivo de cabecera
.hde tu clase de modo de juego. Los ejemplos de código de este tutorial usan una clase llamadaAdventureGameMode.El código predeterminado debería tener este aspecto:
C++UCLASS() class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase { GENERATED_BODY() };GENERATED_BODY()es una macro de la herramienta Unreal Header Tool que genera automáticamente el código necesario para que esta clase y otros UObjects funcionen en Unreal Engine. Si quieres más información sobre la herramienta Unreal Header Tool, consulta la documentación de UHT.La clase
AAdventureGameModeexpone diferentes estados del modo de juego a tu código, como el inicio o el final de una partida, la entrada a un mapa o que una partida está en curso. Cuando cada estado se activa, se ejecuta una función asociada, comoStartPlay()oResetLevel().Añade una declaración de anulación para la función
StartPlay()a tu claseAAdventureGameModeBase.C++UCLASS() class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase { GENERATED_BODY() virtual void StartPlay() override; };Guarda el archivo
.h.
Las clases y funciones de Unreal Engine tienen prefijos que le indican a la herramienta de cabecera de UE el tipo de clase. Por ejemplo, el prefijo A es para actores, U, es para UObjects y F, para structs. Si quieres más información sobre los prefijos de clase C++ en Unreal Engine, consulta Estándares de codificación C++ de Epic: convenciones de nomenclatura.
Añadir un mensaje de depuración a StartPlay()
Implementa tu anulación de StartPlay() con código personalizado que imprima un mensaje de depuración.
Para que aparezca un mensaje de depuración en pantalla al iniciar el juego, sigue estos pasos:
Abre el archivo
.cppde tu modo de juego para implementar la función que acabas de declarar.Añade una nueva definición de función para
StartPlay(). Esta función se declara enAAdventureGameMode, así que defínela utilizandoAAdventureGameMode::StartPlay().C++void AAdventureGameMode::StartPlay() { }Dentro de
AMyGameModeBase::StartPlay(), añadeSuper::StartPlay()para llamar a la funciónStartPlay()desde la clase padreAAdventureGameMode. Esto es necesario para gestionar el resto de la lógica que debería ejecutarse al iniciarse el juego.A continuación, añade una
comprobacióndeGEngine != nullptrpara garantizar que el puntero global al motor es válido.C++void AAdventureGameMode::StartPlay() { Super::StartPlay(); check(GEngine != nullptr); }Se trata de un puntero a la clase UEngine que usa Unreal Engine. Al comprobar que es válida, te aseguras de que el juego se ejecutará correctamente antes de que continúe el código. Si el puntero global al motor no es válido, el juego se bloqueará.
Utiliza
GEnginepara acceder a la función miembroAddOnScreenDebugMessage()de UEngine, que muestra un mensaje en pantalla cuando el juego se está ejecutando.Esta función toma cuatro valores:
Una clave int única que identifica el mensaje y evita que el mismo mensaje se añada varias veces. Usa
-1si la unicidad no importa.Un número float de segundos para mostrar el mensaje.
Un
FColorque establece el color del texto.Un mensaje
FStringque imprimir.
Si se usan los siguientes valores, aparecerá en pantalla el mensaje “Hello World!” en amarillo durante cinco segundos al empezar el juego:
C++GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World, this is AdventureGameMode!"));Guarda el archivo
.cpp.
Ahora, AAdventureGameMode::StartPlay() debería tener este aspecto:
#include "AdventureGameMode.h"
void AAdventureGameMode::StartPlay()
{
Super::StartPlay();
check(GEngine != nullptr);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World!"));
}UE_LOG es otra función útil para imprimir mensajes de depuración. En lugar de mostrar un mensaje en pantalla, registra los mensajes en el registro de salida o en la consola de Unreal Engine durante el tiempo de ejecución. Es útil para registrar o hacer un seguimiento de información detallada sobre lo que ocurre en el juego. Puedes categorizar los registros en distintos canales y definir el tipo de mensaje (por ejemplo, informativo, de error o de advertencia). Por ejemplo:UE_LOG(LogTemp, Warning, TEXT("This is a warning message!"));
Compilar y probar el código
Puedes clic en el botón de compilación en Unreal Editor para recompilar el proyecto; no obstante, te recomendamos que lo hagas desde VS. Una vez compilado, podrás ver los cambios en el código reflejados en el editor y en el juego.
Para ver los cambios en el juego, haz clic en el botón de reproducción en la barra de herramientas principal para iniciar el modo Reproducir en el editor (PIE). Tu mensaje de depuración aparecerá en la esquina superior izquierda.
Para salir del modo PIE, pulsa Mayús + Escape o haz clic en el botón de detención en la barra de herramientas del editor de niveles.
Siguiente
Ahora que ya tienes un proyecto básico con un nuevo modo de juego, ¡ya puedes empezar a crear tu personaje jugable! En la siguiente sección, construirás una nueva clase de personaje y aprenderás a usar acciones de entrada para añadir controles de movimiento al personaje.
Crear un personaje jugable con acciones de entrada
Más información sobre cómo empezar a crear un personaje en C++ con acciones de entrada.
Código completo
A continuación encontrarás el código completo creado en esta sección:
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "AdventureGameMode.generated.h"
UCLASS()
class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase
{
GENERATED_BODY()
#include "AdventureGameMode.h"
void AdventureGameMode::StartPlay()
{
Super::StartPlay();
check(GEngine != nullptr);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World!"));
}