En este tema, aprenderemos cómo integrar C++ con Blueprints en Unreal Engine. Esta integración permite aprovechar la flexibilidad y facilidad de uso de Blueprints junto con la potencia y control de C++. A lo largo de esta sección, cubriremos los siguientes puntos:
- Creación de una Clase C++ Base
- Exponiendo Funciones y Variables a Blueprints
- Llamando Funciones C++ desde Blueprints
- Ejemplo Práctico: Creando un Actor Interactivo
- Ejercicios Prácticos
- Creación de una Clase C++ Base
Paso 1: Crear una Nueva Clase C++
- Abre tu proyecto en Unreal Engine.
- Ve a
File > New C++ Class
. - Selecciona
Actor
como la clase base y haz clic enNext
. - Nombra tu clase
MyInteractiveActor
y haz clic enCreate Class
.
Estructura de la Clase
// MyInteractiveActor.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyInteractiveActor.generated.h" UCLASS() class YOURPROJECT_API AMyInteractiveActor : public AActor { GENERATED_BODY() public: // Sets default values for this actor's properties AMyInteractiveActor(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; };
// MyInteractiveActor.cpp #include "MyInteractiveActor.h" // Sets default values AMyInteractiveActor::AMyInteractiveActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; } // Called when the game starts or when spawned void AMyInteractiveActor::BeginPlay() { Super::BeginPlay(); } // Called every frame void AMyInteractiveActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); }
- Exponiendo Funciones y Variables a Blueprints
Para que Blueprints pueda acceder a las funciones y variables de nuestra clase C++, debemos usar macros específicas de Unreal Engine.
Exponer Variables
// MyInteractiveActor.h public: // Expose a variable to Blueprints UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Interaction") FString InteractiveMessage;
Exponer Funciones
// MyInteractiveActor.h public: // Expose a function to Blueprints UFUNCTION(BlueprintCallable, Category="Interaction") void Interact();
// MyInteractiveActor.cpp void AMyInteractiveActor::Interact() { UE_LOG(LogTemp, Warning, TEXT("Interacted with: %s"), *InteractiveMessage); }
- Llamando Funciones C++ desde Blueprints
Crear un Blueprint basado en la Clase C++
- En el Content Browser, haz clic derecho y selecciona
Blueprint Class
. - En la ventana que aparece, selecciona
All Classes
y buscaMyInteractiveActor
. - Selecciona
MyInteractiveActor
y haz clic enSelect
. - Nombra tu Blueprint
BP_MyInteractiveActor
.
Usar la Función en el Blueprint
- Abre
BP_MyInteractiveActor
. - En el Event Graph, arrastra desde el nodo
Event BeginPlay
y buscaInteract
. - Conecta el nodo
Interact
al nodoEvent BeginPlay
.
- Ejemplo Práctico: Creando un Actor Interactivo
Paso 1: Configurar el Actor
- Abre
BP_MyInteractiveActor
. - En el panel de detalles, establece el valor de
InteractiveMessage
a "Hello, Unreal!".
Paso 2: Colocar el Actor en el Nivel
- Arrastra
BP_MyInteractiveActor
desde el Content Browser al nivel.
Paso 3: Probar la Interacción
- Ejecuta el juego y observa el mensaje en la consola cuando el juego comienza.
- Ejercicios Prácticos
Ejercicio 1: Crear un Actor que Cambie de Color
- Crea una nueva clase C++ llamada
ColorChangingActor
. - Expon una variable
FLinearColor
llamadaNewColor
a Blueprints. - Expon una función
ChangeColor
que cambie el color del material del actor. - Crea un Blueprint basado en
ColorChangingActor
y configuraNewColor
. - Llama a
ChangeColor
enEvent BeginPlay
.
Solución
// ColorChangingActor.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "ColorChangingActor.generated.h" UCLASS() class YOURPROJECT_API AColorChangingActor : public AActor { GENERATED_BODY() public: AColorChangingActor(); protected: virtual void BeginPlay() override; public: virtual void Tick(float DeltaTime) override; UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Color") FLinearColor NewColor; UFUNCTION(BlueprintCallable, Category="Color") void ChangeColor(); };
// ColorChangingActor.cpp #include "ColorChangingActor.h" #include "Materials/MaterialInstanceDynamic.h" AColorChangingActor::AColorChangingActor() { PrimaryActorTick.bCanEverTick = true; } void AColorChangingActor::BeginPlay() { Super::BeginPlay(); } void AColorChangingActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); } void AColorChangingActor::ChangeColor() { UMaterialInstanceDynamic* DynamicMaterial = CreateAndSetMaterialInstanceDynamic(0); if (DynamicMaterial) { DynamicMaterial->SetVectorParameterValue("BaseColor", NewColor); } }
Resumen
En esta sección, hemos aprendido cómo integrar C++ con Blueprints en Unreal Engine. Hemos cubierto la creación de una clase C++ base, la exposición de funciones y variables a Blueprints, y cómo llamar funciones C++ desde Blueprints. Además, hemos realizado un ejemplo práctico y proporcionado un ejercicio para reforzar los conceptos aprendidos. Con esta base, estarás preparado para aprovechar al máximo la potencia de C++ y la flexibilidad de Blueprints 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