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
Actor
com 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
MyActor
com 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 propietatMyInt
que podeu editar. - Podeu arrossegar i deixar anar
MyFunction
al 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
MyCharacter
que hereti deACharacter
. - Afegiu una propietat
Health
de tipusfloat
i exposeu-la als Blueprints. - Afegiu una funció
TakeDamage
que redueixiHealth
i exposeu-la als Blueprints. - Creeu un Blueprint basat en
MyCharacter
i configureu la propietatHealth
. - Utilitzeu la funció
TakeDamage
en 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