UE4 动态读取输入配置

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);

}
发布了144 篇原创文章 · 获赞 15 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/maxiaosheng521/article/details/98502049