본문 바로가기
프로그래밍

👨‍💻 [Unreal] 언리얼 엔진 에서 입력 액션 수신을 처리하기 위해서 SetupPlayerInputComponent 는 어떻게 활용할 수 있나요?

by 밝음의기둥 2024. 12. 10.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

언리얼 엔진 에서 입력 액션 수신을 처리하기 위해서 SetupPlayerInputComponent 는 어떻게 활용할 수 있는지 간략히 알아보았습니다.


질문 >

언리얼 엔진 에서 입력 액션 수신을 처리하기 위해서 SetupPlayerInputComponent 는 어떻게 활용할 수 있나요?

답변 >

SetupPlayerInputComponent는 언리얼 엔진에서 입력 바인딩을 처리하기 위해 사용하는 가상 함수입니다. 이 함수는 플레이어가 입력한 데이터(키보드, 마우스, 컨트롤러 등)를 처리하여 액션(Action)축(Axis) 이벤트를 특정 함수에 연결하는 역할을 합니다. 캐릭터 클래스나 사용자 정의 Pawn 클래스에서 이 함수를 오버라이드하여 입력 처리를 구현할 수 있습니다.


SetupPlayerInputComponent의 주요 역할

  1. 입력 이벤트 바인딩:
    • 입력 액션(예: Jump, Fire) 및 축(예: MoveForward, TurnRate)을 처리할 함수를 연결합니다.
  2. 사용자 정의 입력 처리:
    • 입력 시스템(기존 또는 향상된 입력 시스템)을 기반으로 맞춤형 입력 동작을 설정합니다.
  3. 게임 플레이 동작 제어:
    • 입력 이벤트에 따라 캐릭터의 동작(이동, 점프 등)을 처리하거나, 사용자 상호작용을 구현합니다.

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);
}


활용 시 유의사항

  1. 입력 컴포넌트가 제대로 연결되었는지 확인:
    • 플레이어가 조작할 Pawn이나 Character에 입력 컴포넌트가 설정되어 있어야 합니다.
    • Auto Receive Input이 PlayerController와 연결되어야 함.
  2. 입력 시스템 설정:
    • Legacy Input System: Project Settings > Input에서 Action/Axis Mapping을 설정.
    • Enhanced Input System: Input Mapping Context를 생성하고 액션과 키를 매핑.
  3. 멀티플레이어 환경:
    • SetupPlayerInputComponent는 로컬 플레이어의 입력만 처리합니다. 네트워크 환경에서는 RPC(Remote Procedure Call)를 활용하여 서버와 동기화해야 합니다.

결론

SetupPlayerInputComponent는 언리얼 엔진에서 플레이어 입력 처리의 핵심 함수로, 입력 이벤트를 바인딩하고 캐릭터 동작을 정의하는 데 사용됩니다. 기존 입력 시스템에서는 BindActionBindAxis를 사용하며, 향상된 입력 시스템에서는 UEnhancedInputComponent를 활용해 입력 동작을 정의합니다. 게임의 요구 사항에 맞는 입력 시스템을 선택하고, 이 함수에서 입력 바인딩을 설계하여 효율적인 입력 처리를 구현할 수 있습니다.


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형