How to create a UFunction that can be called inside a blueprint that takes in an Enum as a parameter c++???

How to create a UFunction that can be called inside a blueprint that takes in an Enum as a parameter c++???

UENUM(BlueprintType)
enum class EGaitMovement : uint8 {
Walking UMETA(DisplayName = “Walking”),
Running UMETA(DisplayName = “Running”)
};

UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = “Movement”)
EGaitMovement GaitMovement;

void RunAction(GaitMovement);

UFUNCTION(NetMulticast, Reliable)
void Multi_RunAction(GaitMovement);

UFUNCTION(Server, Reliable)
void Server_RunAction(GaitMovement);

cpp:

void AMyCharacter::RunAction(GaitMovement)
{

FString GaitMovementText;

switch (StanceMovement) {
case EStanceMovement::Standing:
	switch (GaitMovement)
	{
	case EGaitMovement::Walking:
		GetCharacterMovement()->MaxWalkSpeed = RunSpeed;
		GaitMovement = EGaitMovement::Running;
		GaitMovementText = TEXT("Running");
		break;
	case EGaitMovement::Running:
		GetCharacterMovement()->MaxWalkSpeed = WalkSpeed;
		GaitMovement = EGaitMovement::Walking;
		GaitMovementText = TEXT("Walking");
		break;
	}
}


GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("GaitMovement: %s"), *GaitMovementText));

}

void AMyCharacter::Multi_RunAction_Implementation(GaitMovement)
{
RunAction();
GaitMovement = GaitMovement;
}

void AMyCharacter::Server_RunAction_Implementation()
{
Multi_RunAction();
GaitMovement = GaitMovement;
}


like this

Not sure if your code compiles. You need to add the type. And if you’re using the exact same name for your argument and member variables, you need to add the proper scope. Compiler usually gives at least a warning. I’d recommend changing ether the member name or the function arguments so that they aren’t identical.

Add BlueprintCallable to any UFUNCTION you want to be able to call from Bluerprints. I haven’t done server stuff, so I can’t help you there.

UENUM(BlueprintType)
enum class EGaitMovement : uint8 {
Walking UMETA(DisplayName = “Walking”),
Running UMETA(DisplayName = “Running”)
};

UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = “Movement”)
EGaitMovement GaitMovement;

void RunAction(EGaitMovement GaitMovement);

UFUNCTION(NetMulticast, Reliable)
void Multi_RunAction(EGaitMovement GaitMovement);

UFUNCTION(Server, Reliable)
void Server_RunAction(EGaitMovement GaitMovement);

cpp:

void AMyCharacter::RunAction(EGaitMovement GaitMovement)
{
FString GaitMovementText;

switch (StanceMovement) {
case EStanceMovement::Standing:
	switch (GaitMovement)
	{
	case EGaitMovement::Walking:
		GetCharacterMovement()->MaxWalkSpeed = RunSpeed;
		this->GaitMovement = EGaitMovement::Running;
		GaitMovementText = TEXT("Running");
		break;
	case EGaitMovement::Running:
		GetCharacterMovement()->MaxWalkSpeed = WalkSpeed;
		this->GaitMovement = EGaitMovement::Walking;
		GaitMovementText = TEXT("Walking");
		break;
	}
}


GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("GaitMovement: %s"), *GaitMovementText));
}

void AMyCharacter::Multi_RunAction_Implementation(EGaitMovement GaitMovement)
{
  RunAction();
  this->GaitMovement = GaitMovement;
}

void AMyCharacter::Server_RunAction_Implementation()
{
  Multi_RunAction();
  this->GaitMovement = GaitMovement;
}

Anyways, not sure if you were having other issues. Let us know what exactly isn’t working.