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 propiedadHealthsea editable y accesible desde Blueprints.UFUNCTION(BlueprintCallable, Category = "Stats")permite que el métodoTakeDamagesea 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
Healthy el métodoTakeDamagedisponibles para su uso.
Ejercicio Práctico
Ejercicio
- Crea una nueva clase
AEnemyque herede deAActor. - Agrega una propiedad
Healthde tipofloatinicializada a150.0f. - Agrega un método
ReceiveDamageque reduzcaHealthen una cantidad especificada. - Expón la propiedad y el método a Blueprints.
- Crea un Blueprint basado en
AEnemyy utiliza el métodoReceiveDamageen 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
