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.

  1. 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
}

  1. 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
}

  1. 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

  1. Crea una nova classe d'actor anomenada ACustomActor.
  2. Afegiu una propietat de tipus int32 anomenada Health.
  3. Afegiu un mètode anomenat TakeDamage que redueixi el valor de Health.
  4. 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.

© Copyright 2024. Tots els drets reservats