2020-12-31_17:03:18
The virtual member functions APawn::SetPlayerInputComponent and APlayerController::SetupInputComponent are called at the start of the game.
Called after the Pawn constructor and before Begin Play.
The Pawn version is passed an UInputComponent.
The Player Controller has a member named InputComponent
UInputComponent is used to bind input events to function callbacks.
The functions we bind should have these signatures:
- Action event:
void(). - Axis event:
void(float).
I believe Delegates, or some related object, can be used to make functions with other signatures look like it has these signatures. [[2021-03-10_10:42:34]] Delegate
A member function is bound to a named input action event with BindAction.
FInputActionBinding& UInputComponent::BindAction(
FName ActionName, EInputEvent KeyEvent, UserClass* Object, FInputActionHandlerSignature Function);A member function is bound to a named input axis event with BindAxis.
FInputAxisBinding& UInputComponent::BindAction(
FName AxisName, UserClass* Object, FInputActionHandlerSignature Function);The names ActionName and AxisName must be input actions defined in Project Settings > Engine > Input > Bindings.
The EInputEvent KeyEvent is either IE_Pressed or IE_Released.
Object is a pointer to the object that should receive the callback.
Function is a pointer to the member function that should be called.
An example SetupPlayerInputComponent implementation:
UCLASS()
class AMyPawn : public APawn
{
public:
GENERATED_BODY()
virtual void SetupPlayerInputComponent(UInputComponent* Input);
void OnInteractStart();
void OnInteractEnd();
void OnForward(float Value);
void OnRight(float Value);
};
void AMyPawn::SetupPlayerInputComponent(UInputComponent* Input)
{
Super::SetupPlayerInputComponent(Input);
Input->BindAction("Interact", IE_Pressed, this, &AMyPawn::OnInteractStart);
Input->BindAction("Interact", IE_Released, this, &AMyPawn::OnInteractEnd);
Input->BindAxis("Forward", this, &AMyPawn::OnForward);
Input->BindAxis("Right", this, &AMyPawn::OnRight);
}Some configuration can be made on the binding references returned by BindAction and BindAxis.
For example enable or disable consume input.
void AMyPawn::SetupPlayerInputComponent(UInputComponent* Input)
{
Super::SetupPlayerInputComponent(Input);
FInputAxisBinding& InteractStartBinding =
Input->BindAction("Interact", IE_Pressed, this, &AMyPawn::OnInteractStart);
InteractStartBinding.bConsumeInput = false;
}There is something called an Input Processor. Don't know much about it, but it is created and registered with
auto InputProcessor = MakeShareable(new FMyInputProcessor(this)); FSlateApplication::Get().RegisterInputPreProcessor(InputProcessor);where MyInputProcessor implements IInputProcessor.
[[2020-04-10_21:46:17]] Inputs
[[2021-01-01_16:41:46]] C++ Pawn
[[2021-01-03_17:40:41]] C++ Character
[[2020-04-11_11:27:52]] PlayerController