Objetos Enums
1. O que são Enums?
Uma enumeração é um tipo definido pelo usuário que consiste em um conjunto de constantes integrais nomeadas que são conhecidas como enumeradores.
Exemplo:
enum cores = { vermelho,amarelo, azul, verde = 20, preto}
2. Criando Enums no Unreal Engine e Blueprint
Execute o comando no menu de contexto Blueprints
> Enumeration
e logo depois preencha os valores conforme a tela abaixo.
3. Criando Enums no Unreal Engine e C++
Arquivo header.
Visual Studio
> Arquivo
> Novo
> Arquivo
> Escolha Visual C++, Arquivo de Cabeçalho (.h)
// EnumName.h
UENUM(BlueprintType)
namespace EStatusEnum {
// Definimos namespace para que não existam conflitos no acesso aos elementos.
enum Status
{
Ligada UMETA(DisplayName = "Ligada"),
Desligada UMETA(DisplayName = "Desligada"),
};
}
Arquivo de implementação.
// Hero.cpp
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Status)
TEnumAsByte < EStatusEnum::Status > status;
4. Exemplos de uso - A lâmpada
Vamos verificar e alterar o estado de uma lâmpada utilizando uma variável do tipo boolean
.
5. A lâmpada em C++
void AFirstPersonBaseCodeCharacter::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
// set up gameplay key bindings
check(InputComponent);
...
InputComponent->BindAxis("AnyKey", this, &AFirstPersonBaseCodeCharacter::AnyKey);
...
}
void AFirstPersonBaseCodeCharacter::AnyKey(float Value)
{
if bLigado
{
UE_LOG(LogTemp, Warning, TEXT("Lâmpada ligada."));
}
else
UE_LOG(LogTemp, Warning, TEXT("Lâmpada desligada."));
}
Alterando o componente PointLight
para ligar e desligar a iluminação.
5.1. Arquivo Header da lâmpada em C++
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ControlLight.generated.h"
UCLASS()
class CPP5_API AControlLight : public AActor
{
GENERATED_BODY()
public:
UPROPERTY()
USceneComponent* Root;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Parameters")
bool bLigado;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Parameters")
float fIntensidade;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Parameters")
class UPointLightComponent* PointLight;
UPROPERTY(EditAnywhere, Meta = (MakeEditWidget = true))
FVector TargetLocation;
AControlLight();
protected:
virtual void BeginPlay() override;
void AnyKey();
public:
virtual void Tick(float DeltaTime) override;
void InitControl();
class APlayerController* PlayerControllControlLight;
};
Arquivo de implementação.
#include "ControlLight.h"
#include "Components/PointLightComponent.h"
#include "Kismet/GameplayStatics.h"
#include "Components/InputComponent.h"
// Sets default values
AControlLight::AControlLight()
{
PrimaryActorTick.bCanEverTick = true;
Root = CreateDefaultSubobject<USceneComponent>("Root");
RootComponent = Root;
PointLight = CreateDefaultSubobject<UPointLightComponent>(TEXT("Ponto de Luz"));
PointLight->SetRelativeTransform(FTransform(FRotator(0, 0, 0), FVector(250, 0, 0),FVector(0.1f)));
fIntensidade = 10000;
bLigado = true;
}
void AControlLight::InitControl()
{
FVector GlobalLocation = GetTransform().TransformPosition(TargetLocation);
PointLight->SetWorldLocation(GlobalLocation);
PointLight->SetIntensity(fIntensidade);
}
// Called when the game starts or when spawned
void AControlLight::BeginPlay()
{
Super::BeginPlay();
PlayerControllControlLight = UGameplayStatics::GetPlayerController(this, 0);
EnableInput(PlayerControllControlLight);
AControlLight::InitControl();
}
// Called every frame
void AControlLight::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (PlayerControllControlLight != NULL)
{
if (PlayerControllControlLight->WasInputKeyJustPressed(EKeys::T))
{
AnyKey();
}
}
}
void AControlLight::AnyKey()
{
if (bLigado)
{
fIntensidade = 0;
bLigado = false;
}
else
{
fIntensidade = 10000;
bLigado = true;
}
PointLight->SetIntensity(fIntensidade);
}
6. Verificando o estado utilizando o Enum com Blueprint
7. Verificando o estado utilizando o Enum com C++
// Definindo um status no enum.
status = EStatusEnum::Ligada;
UE_LOG(LogTemp, Warning,TEXT("O enum é = %s"), *UEnum::GetValueAsString(status));
8. Ligando e desligando utilizando o Enum com Blueprint
9. Ligando e desligando utilizando o Enum com C++
...
if (status = EStatusEnum::Ligada) {
fIntensidade = 0;
bLigado = false;
status = EStatusEnum::Desligada;
}
else {
fIntensidade = 10000;
bLigado = true;
status = EStatusEnum::Ligada;
}
10. Exemplos de uso - A pedra das emoções
Vamos verificar e alterar o estado de emocional de uma pedra.
Alterando o estado emocional da pedra.