Enhanced Input C++

끄적끄적·2025년 2월 6일

InputAction


Value타입에 필요한 값 설정
MoveAction이기 때문에 Vector2D

Input Mapping Context

Modifiers

  • Swizzle Input Axis Values : 입력 받을 값의 축을 설정

  • Negate : 반대 값 설정

    PlayerController

    PlayerController.h

    #include "CoreMinimal.h"
    #include "GameFramework/PlayerController.h"
    #include "SpartaPlayerController.generated.h"
    class UInputMappingContext;
    class UInputAction;
    
     UCLASS()
     class TASK6_API ASpartaPlayerController : public APlayerController
     {
         GENERATED_BODY()
     public:
    
         ASpartaPlayerController();
    
         UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
         UInputMappingContext* InputMappingContext;
         UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
         UInputAction* MoveAction;
         UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
         UInputAction* JumpAction;
         UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
         UInputAction* SprintAction;
         UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
         UInputAction* LookAction;
    
         virtual void BeginPlay();
     };

    Property 선언부

    PlayerController.cpp


 #include "SpartaPlayerController.h"
 #include "EnhancedInputSubsystems.h"
	ASpartaPlayerController::ASpartaPlayerController()
	:	InputMappingContext(nullptr),
		MoveAction(nullptr),
		JumpAction(nullptr),
		SprintAction(nullptr),
		LookAction(nullptr)
	{

	}

  void ASpartaPlayerController::BeginPlay()
  {
      Super::BeginPlay();

	if (ULocalPlayer* LocalPlayer = GetLocalPlayer())
	{
		if (UEnhancedInputLocalPlayerSubsystem* SubSystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
		{
			if (InputMappingContext)
			{
				SubSystem->AddMappingContext(InputMappingContext, 0);
			}
		}
	}
}

인풋 액션 생성자에서 초기화
BeginPlay 에서 InputMappingContext 적용

BP_PlayerController


블루 프린트에서 설정

BP_GameMode


게임모드에서 설정한 컨트롤러 블루프린트를 적용

Bind

void ATask7Pawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);


	if (UEnhancedInputComponent* EnhancedInput = Cast<UEnhancedInputComponent>(PlayerInputComponent))
	{
		if (ASpartaPlayerController* PlayerController = Cast<ASpartaPlayerController>(GetController()))
		{
			if (PlayerController->MoveAction)
			{
				EnhancedInput->BindAction(PlayerController->MoveAction, ETriggerEvent::Triggered, this, &ATask7Pawn::Move);
				EnhancedInput->BindAction(PlayerController->MoveAction, ETriggerEvent::Completed, this, &ATask7Pawn::StopMove);
			
			}
			if (PlayerController->LookAction)
			{
				EnhancedInput->BindAction(PlayerController->LookAction, ETriggerEvent::Triggered, this, &ATask7Pawn::Look);
				EnhancedInput->BindAction(PlayerController->LookAction, ETriggerEvent::Completed, this, &ATask7Pawn::StopLook);
			}

		}
	}


}

BindAction(Controller에서 설정한 InputAction,입력 이벤트 종류 , 대상 , 실행할 함수)

EX

컨트롤러가 바인딩된 엑터에서 입력에 맞게 바인딩된 함수를 실행한다
WASD를 누르면 Vector2D의 값이 FInputActionValue& 의 value로 들어온다


MoveInput을 활용해서 캐릭터를 움직인다.

0개의 댓글