1

我是虚幻引擎和 C++ 的新手...

我正在尝试获取分配的轴键。我发现信息存储在 DefaultInput.ini 文件中,但我如何以编程方式访问这些数据?

有一个 GetAxisValue(const FName) 方法,但它不返回任何内容。

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

我究竟做错了什么?我将衷心感谢您的帮助。

4

2 回答 2

2

我不确定,因为我大部分时间都为此使用蓝图,但获取值的一种方法是将其绑定到方法。

(AFPSCharacter 模板示例)

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

然后在方法中使用

void AFPSCharacter::MoveForward(float Value){
//for example print the val
 UE_LOG(LogTemp, Warning, TEXT("%f"), Value);
}
于 2019-12-09T13:08:39.800 回答
1

这也是我的第一个想法,但不幸的是您无法获得密钥,您只需将方法绑定到轴名称即可。MoveForward 的“Value”参数保存比例值,但不保存 Key 值。例如,当您按“W”时为 1.0f,当您按“S”时为 -1.0f。

我已经为我的问题找到了解决方案。GetAxisValue(FName) 是用于此目的的错误方法。

相反,我发现 UInputSettings 类包含一个名为 GetAxisMappingByName(FName, TArray) 的方法

这是一个代码片段,它是如何工作的:

// 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;
}

分配键是否有比使用 for 循环更好的解决方案?请随意更正我的代码,因为我并不是真正的 C++ 专家。;-)

于 2019-12-10T07:11:55.923 回答