Got it. This is super helpful. Thanks heaps. Especially that insight that the events are propagating down.
On that page you linked it has this, which looks very promising. Maybe doing it in PawnClientRestart will cause the binding to be done [again] after the possess. I’ll try it out and report back.
Once you have populated an Input Mapping Context, you can add it to the Local Player associated with the Pawn’s Player Controller . Do this by overriding the PawnClientRestart function and adding a code block like this:
// Make sure that we have a valid PlayerController.
if (APlayerController* PC = Cast<APlayerController>(GetController()))
{
// Get the Enhanced Input Local Player Subsystem from the Local Player related to our Player Controller.
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer()))
{
// PawnClientRestart can run more than once in an Actor's lifetime, so start by clearing out any leftover mappings.
Subsystem->ClearAllMappings();
// Add each mapping context, along with their priority values. Higher values take priority over lower values.
Subsystem->AddMappingContext(MyInputMappingContext, MyInt32Priority);
}
}