En este tema, aprenderás cómo crear y utilizar clases en C++ dentro de Unreal Engine. Las clases son fundamentales en la programación orientada a objetos y te permitirán estructurar tu código de manera eficiente y modular.
Objetivos del Tema
- Entender la estructura básica de una clase en C++.
- Aprender a crear clases en Unreal Engine.
- Conocer cómo declarar y definir métodos y propiedades.
- Integrar clases C++ con Blueprints.
Estructura Básica de una Clase en C++
Una clase en C++ se compone de una declaración y una definición. La declaración se realiza en un archivo de cabecera (.h) y la definición en un archivo de implementación (.cpp).
Declaración de una Clase
// MyClass.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyClass.generated.h" UCLASS() class MYPROJECT_API AMyClass : public AActor { GENERATED_BODY() public: // Constructor AMyClass(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; // Example property UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Example") int32 ExampleProperty; // Example method UFUNCTION(BlueprintCallable, Category = "Example") void ExampleMethod(); };
Definición de una Clase
// MyClass.cpp #include "MyClass.h" // Constructor AMyClass::AMyClass() { // Set this actor to call Tick() every frame. PrimaryActorTick.bCanEverTick = true; } // Called when the game starts or when spawned void AMyClass::BeginPlay() { Super::BeginPlay(); } // Called every frame void AMyClass::Tick(float DeltaTime) { Super::Tick(DeltaTime); } // Example method definition void AMyClass::ExampleMethod() { // Method logic here }
Creando Clases en Unreal Engine
Paso 1: Crear una Nueva Clase
- Abre tu proyecto en Unreal Engine.
- Ve a la pestaña "File" y selecciona "New C++ Class".
- Elige la clase base adecuada (por ejemplo,
Actor
). - Asigna un nombre a tu clase (por ejemplo,
MyClass
). - Haz clic en "Create Class".
Paso 2: Modificar la Clase
Una vez creada la clase, Unreal Engine generará automáticamente los archivos de cabecera (.h) y de implementación (.cpp). Puedes modificar estos archivos para agregar propiedades y métodos según tus necesidades.
Ejemplo Práctico
Vamos a crear una clase AMyActor
que tenga una propiedad Health
y un método TakeDamage
.
Declaración de la Clase
// MyActor.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyActor.generated.h" UCLASS() class MYPROJECT_API AMyActor : public AActor { GENERATED_BODY() public: // Constructor AMyActor(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; // Health property UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats") float Health; // TakeDamage method UFUNCTION(BlueprintCallable, Category = "Stats") void TakeDamage(float DamageAmount); };
Definición de la Clase
// MyActor.cpp #include "MyActor.h" // Constructor AMyActor::AMyActor() { // Set this actor to call Tick() every frame. PrimaryActorTick.bCanEverTick = true; // Initialize Health Health = 100.0f; } // Called when the game starts or when spawned void AMyActor::BeginPlay() { Super::BeginPlay(); } // Called every frame void AMyActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); } // TakeDamage method definition void AMyActor::TakeDamage(float DamageAmount) { Health -= DamageAmount; if (Health <= 0) { // Handle actor death } }
Integrando Clases C++ con Blueprints
Una de las ventajas de Unreal Engine es la capacidad de integrar C++ con Blueprints. Esto permite a los diseñadores de juegos utilizar la lógica escrita en C++ dentro del editor de Blueprints.
Exponer Propiedades y Métodos a Blueprints
Para exponer propiedades y métodos a Blueprints, utilizamos las macros UPROPERTY
y UFUNCTION
.
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats")
permite que la propiedadHealth
sea editable y accesible desde Blueprints.UFUNCTION(BlueprintCallable, Category = "Stats")
permite que el métodoTakeDamage
sea llamado desde Blueprints.
Ejemplo de Uso en Blueprints
- Abre el editor de Blueprints.
- Crea un nuevo Blueprint basado en
AMyActor
. - En el editor de Blueprints, verás la propiedad
Health
y el métodoTakeDamage
disponibles para su uso.
Ejercicio Práctico
Ejercicio
- Crea una nueva clase
AEnemy
que herede deAActor
. - Agrega una propiedad
Health
de tipofloat
inicializada a150.0f
. - Agrega un método
ReceiveDamage
que reduzcaHealth
en una cantidad especificada. - Expón la propiedad y el método a Blueprints.
- Crea un Blueprint basado en
AEnemy
y utiliza el métodoReceiveDamage
en un evento de colisión.
Solución
Declaración de la Clase
// Enemy.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Enemy.generated.h" UCLASS() class MYPROJECT_API AEnemy : public AActor { GENERATED_BODY() public: // Constructor AEnemy(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; // Health property UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats") float Health; // ReceiveDamage method UFUNCTION(BlueprintCallable, Category = "Stats") void ReceiveDamage(float DamageAmount); };
Definición de la Clase
// Enemy.cpp #include "Enemy.h" // Constructor AEnemy::AEnemy() { // Set this actor to call Tick() every frame. PrimaryActorTick.bCanEverTick = true; // Initialize Health Health = 150.0f; } // Called when the game starts or when spawned void AEnemy::BeginPlay() { Super::BeginPlay(); } // Called every frame void AEnemy::Tick(float DeltaTime) { Super::Tick(DeltaTime); } // ReceiveDamage method definition void AEnemy::ReceiveDamage(float DamageAmount) { Health -= DamageAmount; if (Health <= 0) { // Handle enemy death } }
Conclusión
En este tema, has aprendido cómo crear y utilizar clases en C++ dentro de Unreal Engine. Has visto cómo declarar y definir propiedades y métodos, así como cómo exponerlos a Blueprints para su uso en el editor. Con esta base, estás preparado para crear estructuras de código más complejas y eficientes en tus proyectos de Unreal Engine.
Curso de Unreal Engine
Módulo 1: Introducción a Unreal Engine
- ¿Qué es Unreal Engine?
- Instalando Unreal Engine
- Navegando por la Interfaz
- Creando tu Primer Proyecto
Módulo 2: Conceptos Básicos
Módulo 3: Blueprints Intermedios
- Variables y Tipos de Datos
- Funciones y Eventos
- Comunicación entre Blueprints
- Creando Objetos Interactivos
Módulo 4: Blueprints Avanzados
- Scripting con Blueprints
- IA y Árboles de Comportamiento
- Blueprints de Animación
- Diseño Avanzado de UI
Módulo 5: Programación en C++ en Unreal Engine
- Configurando tu Entorno de Desarrollo
- Sintaxis Básica de C++
- Creando Clases en C++
- Integrando C++ con Blueprints
Módulo 6: Programación Avanzada en C++
Módulo 7: Temas Avanzados
- Física y Colisión
- Renderizado y Post-Procesamiento
- Generación de Contenido Procedural
- Desarrollo de Realidad Virtual