在xxx.Build.cs里添加“EnhancedInput”
创建InputAction,配置按键
创建InputMappingContext,并绑定InputAction
(使用蓝图)创建PlayerController蓝图
写个C++
// ==== .h ====
#pragma once
#include "CoreMinimal.h"
#include "EnhancedInputComponent.h"
#include "SJPlayerController.generated.h"
UCLASS()
class ASJPlayerController : public APlayerController {
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Input")
void AnyAction();
};
// ==== .cpp ====
#include "SJPlayerController.h"
void ASJPlayerController::AnyAction() {
}
创建蓝图并在GameMode的PlayerControllerClass绑定
蓝图里初始化

蓝图里绑定触发函数

(使用C++)
// MyPlayerController.cpp
if (ULocalPlayer *LocalPlayer = GetLocalPlayer()) {
if (UEnhancedInputLocalPlayerSubsystem *inputSubSystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>()) {
inputSubSystem->AddMappingContext(inputModule->mappingContext.LoadSynchronous(), 1);
}
}
// MyInputModule.cpp
void AInputModule::SetupPlayerInputComponent(UInputComponent* _inputComponent) {
Super::SetupPlayerInputComponent(_inputComponent);
if (UEnhancedInputComponent* EnhancedInput = Cast<UEnhancedInputComponent>(_inputComponent)) {
EnhancedInput->BindAction(action_moveHorizontal, ETriggerEvent::Triggered, this, &AInputModule::OnMoveHorizontal);
EnhancedInput->BindAction(action_moveVertical, ETriggerEvent::Triggered, this, &AInputModule::OnMoveVertical);
}
}
void AInputModule::OnMoveHorizontal(const FInputActionValue& Value) {
float axis = Value.Get<float>();
moveAxis.X = axis;
}
void AInputModule::OnMoveVertical(const FInputActionValue& Value) {
float axis = Value.Get<float>();
moveAxis.Y = axis;
}