"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
언리얼 엔진 에서 입력 액션 수신을 처리하기 위해서 SetupPlayerInputComponent 는 어떻게 활용할 수 있는지 간략히 알아보았습니다.
질문 >
언리얼 엔진 에서 입력 액션 수신을 처리하기 위해서 SetupPlayerInputComponent 는 어떻게 활용할 수 있나요?
답변 >
SetupPlayerInputComponent는 언리얼 엔진에서 입력 바인딩을 처리하기 위해 사용하는 가상 함수입니다. 이 함수는 플레이어가 입력한 데이터(키보드, 마우스, 컨트롤러 등)를 처리하여 액션(Action) 및 축(Axis) 이벤트를 특정 함수에 연결하는 역할을 합니다. 캐릭터 클래스나 사용자 정의 Pawn 클래스에서 이 함수를 오버라이드하여 입력 처리를 구현할 수 있습니다.
SetupPlayerInputComponent의 주요 역할
- 입력 이벤트 바인딩:
- 입력 액션(예: Jump, Fire) 및 축(예: MoveForward, TurnRate)을 처리할 함수를 연결합니다.
- 사용자 정의 입력 처리:
- 입력 시스템(기존 또는 향상된 입력 시스템)을 기반으로 맞춤형 입력 동작을 설정합니다.
- 게임 플레이 동작 제어:
- 입력 이벤트에 따라 캐릭터의 동작(이동, 점프 등)을 처리하거나, 사용자 상호작용을 구현합니다.
SetupPlayerInputComponent의 기본 구조
함수 시그니처
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
예제 코드 (기존 입력 시스템)
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// Action 바인딩
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AMyCharacter::Jump);
PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &AMyCharacter::Fire);
// Axis 바인딩
PlayerInputComponent->BindAxis("MoveForward", this, &AMyCharacter::MoveForward);
PlayerInputComponent->BindAxis("Turn", this, &AMyCharacter::Turn);
}
입력 처리 단계
- Action 바인딩:
- BindAction 함수는 입력이 발생했을 때 호출할 함수를 연결합니다.
- IE_Pressed, IE_Released 이벤트를 처리합니다.
- 예: Spacebar가 눌릴 때 캐릭터가 점프.
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AMyCharacter::Jump);
- Axis 바인딩:
- BindAxis 함수는 연속적인 입력 값을 처리하며, 마우스 이동, 아날로그 스틱 움직임 등에 사용됩니다.
- 예: W/S 키를 사용해 캐릭터를 앞으로/뒤로 이동.
PlayerInputComponent->BindAxis("MoveForward", this, &AMyCharacter::MoveForward);
- 입력 처리 함수 구현:
- 바인딩된 함수에서 입력 데이터를 받아 캐릭터 동작을 정의합니다.
- 예:
void AMyCharacter::MoveForward(float Value)
{
AddMovementInput(GetActorForwardVector(), Value);
}
void AMyCharacter::Turn(float Value)
{
AddControllerYawInput(Value);
}
향상된 입력 시스템에서의 활용
향상된 입력 시스템을 사용하는 경우, UEnhancedInputComponent를 사용하여 입력 액션을 바인딩합니다.
예제 코드
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::Move);
}
}
void AMyCharacter::Move(const FInputActionValue& Value)
{
FVector2D MovementInput = Value.Get<FVector2D>();
AddMovementInput(GetActorForwardVector(), MovementInput.Y);
AddMovementInput(GetActorRightVector(), MovementInput.X);
}
활용 시 유의사항
- 입력 컴포넌트가 제대로 연결되었는지 확인:
- 플레이어가 조작할 Pawn이나 Character에 입력 컴포넌트가 설정되어 있어야 합니다.
- Auto Receive Input이 PlayerController와 연결되어야 함.
- 입력 시스템 설정:
- Legacy Input System: Project Settings > Input에서 Action/Axis Mapping을 설정.
- Enhanced Input System: Input Mapping Context를 생성하고 액션과 키를 매핑.
- 멀티플레이어 환경:
- SetupPlayerInputComponent는 로컬 플레이어의 입력만 처리합니다. 네트워크 환경에서는 RPC(Remote Procedure Call)를 활용하여 서버와 동기화해야 합니다.
결론
SetupPlayerInputComponent는 언리얼 엔진에서 플레이어 입력 처리의 핵심 함수로, 입력 이벤트를 바인딩하고 캐릭터 동작을 정의하는 데 사용됩니다. 기존 입력 시스템에서는 BindAction과 BindAxis를 사용하며, 향상된 입력 시스템에서는 UEnhancedInputComponent를 활용해 입력 동작을 정의합니다. 게임의 요구 사항에 맞는 입력 시스템을 선택하고, 이 함수에서 입력 바인딩을 설계하여 효율적인 입력 처리를 구현할 수 있습니다.
🎬 유튜브 채널 🎬
🎬 치지직 채널 🎬
'프로그래밍' 카테고리의 다른 글
👨💻 [Unreal] 언리얼 엔진 에서 라인 트레이스 (Line Trace) 란 무엇이고, 어떻게 활용할 수 있나요? (3) | 2024.12.11 |
---|---|
👨💻 [Unreal] 언리얼 엔진 에서 Collision (충돌) 이란 무엇이고, 어떻게 활용할 수 있나요? (3) | 2024.12.11 |
👨💻 [Unreal] 언리얼 엔진 에서 플레이어 입력 처리는 어떻게 처리 되나요? (3) | 2024.12.10 |
👨💻 [Flutter] Flutter 에서 윈도우 창의 최소크기를 지정하려면 어떻게 해야 하나요? (3) | 2024.12.06 |
👨💻 [Flutter] Flutter 에서 Scaffold 클래스는 무엇이며, 어떻게 활용할 수 있나요? (4) | 2024.12.06 |