반응형
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
언리얼 엔진 에서 플레이어 입력 처리는 어떻게 처리 되는지 간략히 알아보았습니다.
질문 >
언리얼 엔진 에서 플레이어 입력 처리는 어떻게 처리 되나요?
답변 >
언리얼 엔진에서 플레이어 입력 처리는 플레이어가 입력 장치(키보드, 마우스, 컨트롤러 등)를 통해 제공하는 명령을 받아 게임 오브젝트의 동작을 제어하는 데 사용됩니다. 입력 처리는 주로 PlayerController, Pawn/Character 클래스, 그리고 입력 시스템(기존 입력 또는 향상된 입력 시스템)을 통해 이루어집니다.
플레이어 입력 처리의 주요 구성 요소
- PlayerController:
- 플레이어 입력을 가장 먼저 처리하는 클래스입니다.
- 입력 데이터를 수신하고 이를 게임 내 캐릭터나 다른 객체에 전달합니다.
- 싱글 플레이어 게임에서는 한 개의 PlayerController만 필요하며, 멀티플레이어 게임에서는 각 플레이어가 자신의 PlayerController를 가집니다.
- Pawn/Character:
- 입력 데이터를 받아 캐릭터의 동작을 구현합니다.
- Pawn: 기본 이동 및 동작 정의.
- Character: 이동, 점프 등 고급 이동 로직을 포함한 확장 클래스.
- 입력 시스템:
- 입력 처리는 기존 입력 시스템(Legacy Input System) 또는 향상된 입력 시스템(Enhanced Input System) 중 하나를 사용하여 처리됩니다.
입력 처리 방식
1. 기존 입력 시스템 (Legacy Input System)
기존 입력 시스템에서는 Action Mapping과 Axis Mapping을 통해 입력 이벤트를 정의합니다.
- Action Mapping:
- 특정 키가 눌렸을 때의 이벤트를 처리합니다(예: 점프, 공격).
- 예: Spacebar를 누르면 점프 실행.
- Axis Mapping:
- 연속적인 값(예: 아날로그 스틱 입력, 마우스 이동)을 처리합니다.
- 예: 캐릭터 이동, 카메라 회전.
입력 정의 예제:
- Project Settings > Input에서 Action Mapping 및 Axis Mapping 설정.
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AMyCharacter::Jump);
PlayerInputComponent->BindAxis("MoveForward", this, &AMyCharacter::MoveForward);
}
2. 향상된 입력 시스템 (Enhanced Input System)
향상된 입력 시스템은 더 유연하고 강력한 입력 관리 기능을 제공합니다.
- Input Mapping Context:
- 입력 동작(Input Action)을 키보드, 마우스, 컨트롤러 등의 입력 장치에 매핑.
- 상황에 따라 입력 체계를 동적으로 전환 가능.
- Input Action:
- 버튼, 축, 또는 복합 입력을 정의.
- 예: Jump(Boolean), MoveForward(Axis), Look(Vector2D).
입력 처리 예제:
- Input Mapping Context와 Input Action을 생성 후 매핑.
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
UEnhancedInputComponent* EnhancedInput = Cast<UEnhancedInputComponent>(PlayerInputComponent);
if (EnhancedInput)
{
EnhancedInput->BindAction(JumpAction, ETriggerEvent::Started, this, &AMyCharacter::Jump);
EnhancedInput->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyCharacter::MoveForward);
}
}
입력 처리 흐름
- 입력 이벤트 발생:
- 키보드/마우스 입력 → PlayerController가 입력 데이터 수신.
- 입력 바인딩:
- PlayerController에서 Pawn 또는 Character로 입력 전달.
- 동작 구현:
- 바인딩된 함수에서 입력 이벤트에 따라 게임 오브젝트의 동작 실행.
입력 처리 시 유용한 기능
- 키 리매핑:
- 향상된 입력 시스템을 통해 플레이어가 입력 키를 커스터마이징할 수 있음.
- 다중 입력 디바이스 지원:
- 키보드, 마우스, 컨트롤러 등 여러 입력 장치를 동시에 지원.
- 동적 입력 체계 전환:
- 차량 탑승, 특수 모드 활성화 등 게임 상황에 따라 입력 체계를 변경 가능.
- 멀티플레이어 입력:
- 각 PlayerController는 개별 입력을 처리하여 멀티플레이 환경에서 충돌 없이 작동.
장점과 단점
시스템 | 장점 | 단점 |
Legacy Input | 단순하고 빠르게 설정 가능. Action/Axis Mapping 구조로 직관적. | 확장성 부족. 동적 입력 체계 전환이나 키 리매핑 지원 어려움. |
Enhanced Input | 유연성, 확장성. 동적 전환, 키 리매핑 등 고급 기능 지원. | 복잡한 초기 설정과 러닝 커브. 간단한 게임에서는 불필요하게 과도한 설정일 수 있음. |
결론
언리얼 엔진에서 플레이어 입력 처리는 게임의 주요 동작을 구현하기 위한 핵심 요소로, 기존 입력 시스템은 간단한 입력 관리에 적합하며, 향상된 입력 시스템은 복잡하고 동적인 입력 처리에 적합합니다. 프로젝트의 복잡성과 요구 사항에 따라 적합한 입력 시스템을 선택하여 효율적으로 활용할 수 있습니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
🎬 유튜브 채널 🎬
🎬 치지직 채널 🎬
반응형