En aquest tema, aprendrem a crear classes en C++ dins d'Unreal Engine. Les classes són fonamentals per a la programació orientada a objectes i ens permeten encapsular dades i funcionalitats en una sola entitat. A Unreal Engine, les classes en C++ són essencials per crear actors, components i altres elements del joc.
Objectius
- Entendre la sintaxi bàsica per crear classes en C++.
- Aprendre a definir propietats i mètodes dins d'una classe.
- Integrar classes C++ amb l'editor d'Unreal Engine.
- Crear una classe d'actor personalitzada.
- Creant una Classe Bàsica
1.1. Definició de la Classe
Una classe en C++ es defineix utilitzant la paraula clau class
seguida del nom de la classe. Aquí teniu un exemple bàsic:
// 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: // Funció que es crida quan el joc comença o quan l'actor es genera virtual void BeginPlay() override; public: // Funció que es crida cada frame virtual void Tick(float DeltaTime) override; };
1.2. Implementació de la Classe
Després de definir la classe en el fitxer de capçalera (.h
), hem d'implementar les seves funcions en el fitxer de codi (.cpp
):
// MyActor.cpp #include "MyActor.h" // Constructor AMyActor::AMyActor() { // Establir que aquest actor es cridi cada frame PrimaryActorTick.bCanEverTick = true; } void AMyActor::BeginPlay() { Super::BeginPlay(); // Codi d'inicialització } void AMyActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); // Codi que s'executa cada frame }
- Propietats i Mètodes
2.1. Afegint Propietats
Les propietats són variables membres de la classe. Podem afegir propietats a la nostra classe AMyActor
de la següent manera:
// MyActor.h UCLASS() class MYPROJECT_API AMyActor : public AActor { GENERATED_BODY() public: AMyActor(); protected: virtual void BeginPlay() override; public: virtual void Tick(float DeltaTime) override; // Propietat de tipus float UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="My Properties") float MyFloatProperty; };
2.2. Afegint Mètodes
Els mètodes són funcions membres de la classe. Podem afegir mètodes a la nostra classe AMyActor
de la següent manera:
// MyActor.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 Properties") float MyFloatProperty; // Mètode personalitzat UFUNCTION(BlueprintCallable, Category="My Methods") void MyCustomMethod(); }; // MyActor.cpp #include "MyActor.h" AMyActor::AMyActor() { PrimaryActorTick.bCanEverTick = true; } void AMyActor::BeginPlay() { Super::BeginPlay(); } void AMyActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); } void AMyActor::MyCustomMethod() { // Implementació del mètode personalitzat }
- Integració amb l'Editor d'Unreal Engine
3.1. Compilació i Creació d'Instàncies
Després de definir i implementar la nostra classe, hem de compilar el projecte. Un cop compilat, podem crear instàncies de la nostra classe directament des de l'editor d'Unreal Engine.
3.2. Utilitzant Blueprints
Les propietats i mètodes que hem definit amb UPROPERTY
i UFUNCTION
es poden utilitzar en Blueprints, permetent una integració fluida entre C++ i l'editor visual.
Exercici Pràctic
Exercici 1: Creant una Classe d'Actor Personalitzada
- Crea una nova classe d'actor anomenada
ACustomActor
. - Afegiu una propietat de tipus
int32
anomenadaHealth
. - Afegiu un mètode anomenat
TakeDamage
que redueixi el valor deHealth
. - Implementa la lògica per a
TakeDamage
en el fitxer.cpp
.
Solució
// CustomActor.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CustomActor.generated.h" UCLASS() class MYPROJECT_API ACustomActor : public AActor { GENERATED_BODY() public: ACustomActor(); protected: virtual void BeginPlay() override; public: virtual void Tick(float DeltaTime) override; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Properties") int32 Health; UFUNCTION(BlueprintCallable, Category="Methods") void TakeDamage(int32 DamageAmount); }; // CustomActor.cpp #include "CustomActor.h" ACustomActor::ACustomActor() { PrimaryActorTick.bCanEverTick = true; Health = 100; // Valor inicial de Health } void ACustomActor::BeginPlay() { Super::BeginPlay(); } void ACustomActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); } void ACustomActor::TakeDamage(int32 DamageAmount) { Health -= DamageAmount; if (Health < 0) { Health = 0; } }
Conclusió
En aquest tema, hem après a crear classes en C++ dins d'Unreal Engine, definir propietats i mètodes, i integrar aquestes classes amb l'editor d'Unreal Engine. Aquestes habilitats són fonamentals per a qualsevol desenvolupador que vulgui aprofitar al màxim el poder de C++ en Unreal Engine. En el proper tema, explorarem com integrar C++ amb Blueprints per crear funcionalitats més complexes i interactives.
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