[UE] 간단한 입력 처리 C++ 구현 및 향상된 입력 시스템 활용
언리얼 엔진 5(Unreal Engine 5) 로 입력 처리를 C++ 로 구현해본다.
축 및 액션 매핑은 이제 폐기되었지만, 구버전으로 구현 해보고 향상된 입력 액션 및 매핑 컨텍스트로 전환까지 진행한다.
Pawn 을 부모클래스로 한 새 클래스를 생성.
각 액션과 축 입력을 처리할 메소드 생성.
cpp 코드의 SetupPlayerInputComponent 함수에서 축 입력과 액션을 바인딩 해주고 내용을 작성.
클래스를 상속받는 블루프린트를 만들고, 눈으로 확인하기 위해 Scene Component 아래에 Sphere 메시를 추가.
C++ 클래스의 GameModeBase 도 블루프린트 클래스로 생성한 후, 월드 셋팅에서 기본 게임 모드로 설정. 디폴트 폰 클래스(Default Pawn Class) 를 앞에서 만든 블루프린트 폰으로 설정. 이제 시작하면 앞에서 만든 Pawn 을 스폰하게 됨.
이제 WASD 로 구체(Sphere)를 이동시키고 SpaceBar 로 크기를 키웠다 줄였다 할 수 있게 됨.
향상된 입력 시스템
여기까진 레거시 입력 처리였고, 향상된 입력 처리를 활용해본다.
프로젝트 셋팅에서 입력/Defaul Classes 아래 기본 플레이어 입력 클래스/기본 입력 컴포넌트 클래스를 각각 EnhancedPlayerInput/EnhancedInputComponent 로 셋팅.
4개의 개념이 필요
입력 액션(Input Actions) : 입력 시스템과 코드를 링크
입력 매핑 컨텍스트 (Input Mapping Contexts) : 입력과 액션의 매핑
모디파이어 (Modifiers) : 원시 입력값(Raw Input Value)을 조절.
트리거 (Triggers) : 액션의 활성 여부 결정
먼저 입력 매핑 컨텍스트(InputMappingContext) 를 생성하고, 입력 액션(Input Action)을 생성해서 컨텍스트에 등록. 등록한 입력 액션(Input Action) 은 블루프린트에서 이벤트로 생성할 수 있고, 그렇게 생성한 이벤트에 적절한 액션을 연결할 수 있음.
이 때, 플레이어 컨트롤러(PlayerController)의 향상된 입력 로컬 플레이어 서브시스템에 MappingContext 를 등록해줘야 하는데, 위 블루프린트처럼 노드를 설정해주거나 코드에서 등록을 해줘야 함.
GetEnhancedInputLocalPlayerSubsystem 노드를 활용.
코드는 아래처럼.
출처는 언리얼엔진 기본 3인칭 템플릿 프로젝트를 C++ 로 생성했을 때 제공해주는 코드.
//Add Input Mapping Context
if (APlayerController* PlayerController = Cast<APlayerController>(Controller))
{
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
{
Subsystem->AddMappingContext(DefaultMappingContext, 0);
}
}
아래는 MyAction 이라는 입력 액션 이벤트에 디버깅 텍스트를 출력하도록 설정한 블루프린트 노드.
결과.
언리얼엔진5 향상된 입력 공식 문서
https://docs.unrealengine.com/5.2/ko/enhanced-input-in-unreal-engine/