Unreal 엔진

[UE] 간단한 입력 처리 C++ 구현 및 향상된 입력 시스템 활용

원소랑 2023. 7. 18. 12:17
728x90

언리얼 엔진 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/

 

향상된 입력

향상된 입력 플러그인 개요

docs.unrealengine.com

 

728x90
반응형