Skip to main content

Enhanced Input Setup

Official Documentation:


Create Mappings for your Actions with the new Enhanced Input Mapping.

Create "Input Mapping Context" and "Input Actions"

First, we need to create a "Input Mapping Context" and InputAction's in the Unreal Engine Editor. After that and we implemented the code below - dont forget to assign the InputAction's inside your BP_YourCharacter's Blueprint. It should be in the Details Panel under Input or YourGameName|Input

#include "InputActionValue.h"
#include "YourCharacter.generated.h" // keep this always last

class AYourCharacter : public ACharacter
// Define your Action, just name it as you named it in the Editor
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "GameName|Input", meta = (AllowPrivateAccess = "true"))
class UInputAction* JumpAction; // in this example we'll call it JumpAction

// In this example we'll implement the LineTrace inside the Tick
void Jumping(const FInputActionValue& Value);
void StopJump(const FInputActionValue& Value);
#include "Components/InputComponent.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"

// Your other stuff

void AYourCharacter::BeginPlay()
// Call the base class

//Add Input Mapping Context
if (APlayerController* PlayerController = Cast<APlayerController>(Controller))
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
Subsystem->AddMappingContext(DefaultMappingContext, 0);

// Input
void AYourCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
// Set up action bindings
if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
// You can use the Jump() function directly from the Character.h
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &ACharacter::Jump);
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);

// but we'll use our own function and then call it there
// just to showcase how it works
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &AYourCharacter::Jumping);
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &AYourCharacter::StopJump);

// Input Logic comes here: when
void AYourCharacter::Jumping(const FInputActionValue& Value)
// do something here
// e.g. set a bool bIsJumping or bIsInAir
Jump(); // from Character.h

// if you just want to test your input, you can Log something
UE_LOG(LogTemp, Log, TEXT("Your Input works!"));

void AYourCharacter::StopJump(const FInputActionValue& Value)
// same as above ^^
StopJumping(); // also from Character.h

This was an example on how to use and Setup Enhanced Input in Unreal Engine C++.