1.创建一个标准的第三人称
在Input中删除多余配置选项
2.在角色的.h文件中添加DataTable结构体
//定义输入结构体
USTRUCT(Blueprintable, BlueprintType)
struct FKeyBoardBindingTable: public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(BlueprintReadWrite, EditAnywhere)
FString Action;
UPROPERTY(BlueprintReadWrite, EditAnywhere)
FString Input;
};
3.在工程中对应的目录创建DataTable文件 并配置对应的内容
4.在构造函数中加载Datable资源 在SetupPlayerInputComponent中设置相应输入.
//加载datatable
static ConstructorHelpers::FObjectFinder<UDataTable> KeyBoardBindingTable_DT(TEXT("DataTable'/Game/Datables/KeyBoardConfig.KeyBoardConfig'"));
KeyBoardBindingTable = KeyBoardBindingTable_DT.Object;
void ATestInputCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{
// Set up gameplay key bindings
check(PlayerInputComponent);
//从datatable中读取moveforward moveright
const UInputSettings* InputSettings = GetDefault<UInputSettings>();
int rowIndex = 1;
while (true)
{
FKeyBoardBindingTable* Row = KeyBoardBindingTable->FindRow<FKeyBoardBindingTable>(FName(*FString::FromInt(rowIndex)), TEXT("Default"));
if (Row)
{
if (Row->Action == "Move Forward")
{
const FInputAxisKeyMapping axisMapping(FName("Move Forward"), FKey(*Row->Input), 1);
((UInputSettings*)InputSettings)->AddAxisMapping(axisMapping);
}
else if (Row->Action == "Move Back")
{
const FInputAxisKeyMapping axisMapping(FName("Move Forward"), FKey(*Row->Input), -1);
((UInputSettings*)InputSettings)->AddAxisMapping(axisMapping);
}
}
else
{
break;
}
rowIndex++;
}
InputComponent->BindAxis("Move Forward", this, &ATestInputCharacter::MoveForward);
}