En aquest tema, aprendrem com integrar el codi C++ amb els Blueprints a Unreal Engine. Aquesta combinació permet aprofitar la potència i flexibilitat del codi C++ juntament amb la facilitat d'ús i la rapidesa de desenvolupament dels Blueprints.
Objectius del Tema
- Entendre la relació entre C++ i Blueprints.
- Crear classes C++ que es puguin utilitzar en Blueprints.
- Exposar funcions i variables de C++ als Blueprints.
- Utilitzar Blueprints per estendre la funcionalitat de les classes C++.
- Relació entre C++ i Blueprints
Unreal Engine permet utilitzar C++ i Blueprints de manera conjunta. Les classes creades en C++ poden ser exposades als Blueprints, permetent als desenvolupadors utilitzar la lògica complexa de C++ amb la interfície visual dels Blueprints.
Avantatges de la Integració
- Rendiment: C++ és més ràpid i eficient per a càlculs complexos.
- Flexibilitat: Blueprints permeten iterar ràpidament i ajustar la lògica del joc sense recompilar el codi.
- Col·laboració: Els programadors poden treballar en C++ mentre els dissenyadors de jocs utilitzen Blueprints per ajustar el comportament del joc.
- Creant Classes C++ per a Blueprints
Pas 1: Crear una Classe C++
- A l'Editor d'Unreal Engine, aneu a
File>New C++ Class. - Seleccioneu
Actorcom a classe base. - Doneu un nom a la vostra classe, per exemple,
MyActor. - Feu clic a
Create Class.
Pas 2: Exposar la Classe als Blueprints
Perquè una classe C++ sigui utilitzable en Blueprints, cal marcar-la amb l'etiqueta UCLASS i les seves propietats amb UPROPERTY.
// 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:
AMyActor();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="My Variables")
int32 MyInt;
UFUNCTION(BlueprintCallable, Category="My Functions")
void MyFunction();
};Pas 3: Implementar la Classe
// MyActor.cpp
#include "MyActor.h"
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
MyInt = 0;
}
void AMyActor::BeginPlay()
{
Super::BeginPlay();
}
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void AMyActor::MyFunction()
{
UE_LOG(LogTemp, Warning, TEXT("MyFunction called!"));
}
- Utilitzant la Classe C++ en Blueprints
Pas 1: Crear un Blueprint Basat en la Classe C++
- A l'Editor d'Unreal Engine, aneu a
Content Browser. - Feu clic a
Add New>Blueprint Class. - Seleccioneu
MyActorcom a classe base. - Doneu un nom al vostre Blueprint, per exemple,
BP_MyActor.
Pas 2: Editar el Blueprint
- Obriu
BP_MyActor. - A la finestra de
Details, veureu la propietatMyIntque podeu editar. - Podeu arrossegar i deixar anar
MyFunctional gràfic d'esdeveniments per utilitzar-lo.
- Exercici Pràctic
Exercici 1: Crear una Classe C++ i Utilitzar-la en Blueprints
- Creeu una nova classe C++ anomenada
MyCharacterque hereti deACharacter. - Afegiu una propietat
Healthde tipusfloati exposeu-la als Blueprints. - Afegiu una funció
TakeDamageque redueixiHealthi exposeu-la als Blueprints. - Creeu un Blueprint basat en
MyCharacteri configureu la propietatHealth. - Utilitzeu la funció
TakeDamageen el Blueprint per reduir la salut del personatge quan es produeixi un esdeveniment.
Solució
// MyCharacter.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "MyCharacter.generated.h"
UCLASS()
class MYPROJECT_API AMyCharacter : public ACharacter
{
GENERATED_BODY()
public:
AMyCharacter();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Character Properties")
float Health;
UFUNCTION(BlueprintCallable, Category="Character Functions")
void TakeDamage(float DamageAmount);
};
// MyCharacter.cpp
#include "MyCharacter.h"
AMyCharacter::AMyCharacter()
{
PrimaryActorTick.bCanEverTick = true;
Health = 100.0f;
}
void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
}
void AMyCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void AMyCharacter::TakeDamage(float DamageAmount)
{
Health -= DamageAmount;
if (Health < 0.0f)
{
Health = 0.0f;
}
}Conclusió
Integrar C++ amb Blueprints a Unreal Engine permet combinar el millor dels dos mons: la potència i eficiència del codi C++ amb la facilitat d'ús i rapidesa de desenvolupament dels Blueprints. Aquesta combinació és essencial per a projectes complexos i col·laboratius. En el proper mòdul, explorarem la gestió de memòria en C++ per optimitzar encara més el rendiment del nostre joc.
Curs d'Unreal Engine
Mòdul 1: Introducció a Unreal Engine
- Què és Unreal Engine?
- Instal·lant Unreal Engine
- Navegant per la Interfície
- Creant el teu Primer Projecte
Mòdul 2: Conceptes Bàsics
Mòdul 3: Blueprints Intermedis
- Variables i Tipus de Dades
- Funcions i Esdeveniments
- Comunicació entre Blueprints
- Creant Objectes Interactius
Mòdul 4: Blueprints Avançats
Mòdul 5: Programació en C++ a Unreal Engine
- Configurant el teu Entorn de Desenvolupament
- Sintaxi Bàsica de C++
- Creant Classes en C++
- Integrant C++ amb Blueprints
Mòdul 6: Programació Avançada en C++
Mòdul 7: Temes Avançats
- Física i Col·lisió
- Renderització i Postprocessament
- Generació de Contingut Procedural
- Desenvolupament de Realitat Virtual
