Soy nueva en Unreal Engine y C ++ ...

Estoy tratando de obtener la clave asignada de un eje. Descubrí que la información se almacena en el archivo DefaultInput.ini, pero ¿cómo puedo acceder a estos datos mediante programación?

Hay un método GetAxisValue (const FName) pero no devuelve nada.

FString AxisName = "MoveForward";
auto value = PlayerInputComponent->GetAxisValue(FName(*AxisName));

¿Qué estoy haciendo mal? Realmente agradecería su ayuda.

0
Franz 4 dic. 2019 a las 22:02

2 respuestas

La mejor respuesta

Este fue mi primer pensamiento también, pero desafortunadamente no puede obtener las claves, simplemente vincula el método a un nombre de eje. El parámetro "Valor" de MoveForward contiene el valor de la escala pero no el valor clave. 1.0f, por ejemplo, cuando presiona "W" o -1.0f cuando presiona "S".

Ya he encontrado una solución para mi problema. GetAxisValue (FName) es el método incorrecto para este propósito.

En su lugar, encontré la clase UInputSettings que contiene un método llamado GetAxisMappingByName (FName, TArray)

Aquí un fragmento de código cómo funciona:

// Get the instance of the InputSettings
UInputSettings* InputSettings = UInputSettings::GetInputSettings();

// AxisMappings with all the information will be stored here
TArray<FInputAxisKeyMapping> VerticalKeys;
TArray<FInputAxisKeyMapping> HorizontalKeys;

// Load the AxisMappings
InputSettings->GetAxisMappingByName(FName("MoveForward"), VerticalKeys);
InputSettings->GetAxisMappingByName(FName("MoveRight"), HorizontalKeys);

// Each MovementKey gets its own variable
FKey ForwardKey;
FKey BackKey;
FKey LeftKey;
FKey RightKey;

// Assign each key to the correct direction
for (FInputAxisKeyMapping verticalKey : VerticalKeys)
{
    if (verticalKey.Scale == 1.0f)
        ForwardKey = verticalKey.Key;
    else if (verticalKey.Scale == -1.0f)
        BackKey = verticalKey.Key;
}

for (FInputAxisKeyMapping horizontalKey : HorizontalKeys)
{
    if (horizontalKey.Scale == 1.0f)
        RightKey = horizontalKey.Key;
    else if (horizontalKey.Scale == -1.0f)
        LeftKey = horizontalKey.Key;
}

¿Existe una mejor solución para asignar las claves que usar para bucles? Siéntase libre de corregir mi código ya que no soy realmente un experto en C ++. ;-)

0
Franz 10 dic. 2019 a las 07:55

No estoy seguro porque uso Blueprints la mayor parte del tiempo para esto, pero una forma de obtener el valor es vincularlo a un método.

(Ejemplo de la plantilla de caracteres AFPS)

PlayerInputComponent->BindAxis("MoveForward", this, &APawn::MoveForward);

Y luego usarlo en el método

void AFPSCharacter::MoveForward(float Value){
//for example print the val
 UE_LOG(LogTemp, Warning, TEXT("%f"), Value);
}
1
WolvLey 9 dic. 2019 a las 13:08