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

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

  1. Creant Classes C++ per a Blueprints

Pas 1: Crear una Classe C++

  1. A l'Editor d'Unreal Engine, aneu a File > New C++ Class.
  2. Seleccioneu Actor com a classe base.
  3. Doneu un nom a la vostra classe, per exemple, MyActor.
  4. 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!"));
}

  1. Utilitzant la Classe C++ en Blueprints

Pas 1: Crear un Blueprint Basat en la Classe C++

  1. A l'Editor d'Unreal Engine, aneu a Content Browser.
  2. Feu clic a Add New > Blueprint Class.
  3. Seleccioneu MyActor com a classe base.
  4. Doneu un nom al vostre Blueprint, per exemple, BP_MyActor.

Pas 2: Editar el Blueprint

  1. Obriu BP_MyActor.
  2. A la finestra de Details, veureu la propietat MyInt que podeu editar.
  3. Podeu arrossegar i deixar anar MyFunction al gràfic d'esdeveniments per utilitzar-lo.

  1. Exercici Pràctic

Exercici 1: Crear una Classe C++ i Utilitzar-la en Blueprints

  1. Creeu una nova classe C++ anomenada MyCharacter que hereti de ACharacter.
  2. Afegiu una propietat Health de tipus float i exposeu-la als Blueprints.
  3. Afegiu una funció TakeDamage que redueixi Health i exposeu-la als Blueprints.
  4. Creeu un Blueprint basat en MyCharacter i configureu la propietat Health.
  5. 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.

© Copyright 2024. Tots els drets reservats