[CH4-23] 댄스카운트 중복 증가 문제 - ETriggerEvent 타입별 동작 차이

김여울·2025년 10월 13일
0

내일배움캠프

목록 보기
95/111

💥 문제 상황

히든 승리 조건이 춤 15회인데, E키를 5번만 눌러도 히든 승리 위젯이 나옴...

증상 :
E 한 번 누를 때마다 DanceCount가 2씩 증가하고 있었음

  • E키 한 번 누를 때마다 DanceCount가 2씩 증가
  • 실제 카운트: 3 → 4 → 6 → 8 → 10 → 12 → 22
  • 첫 입력 후 +1, 이후 입력마다 +2씩 증가

🔍 원인 분석

기존 코드

EnhancedInput->BindAction(DanceAction, ETriggerEvent::Triggered, this, &ADCCharacter::Dance);
EnhancedInput->BindAction(AttackAction, ETriggerEvent::Triggered, this, &ADCCharacter::Attack);

문제점 :

  • ETriggerEvent::Triggered는 키를 누르고 있는 동안 매 프레임마다 호출됨
  • E키를 1초간 누르면 60 FPS 기준 60번 호출
  • 의도: 1회 입력 → 실제: 수십 회 호출

🔧 해결 방법

ETriggerEvent 타입별 동작

이벤트 타입호출 시점사용 사례
Started키를 누르는 순간 1번만 호출단발성 액션 (점프, 공격, 춤)
Triggered키를 누르고 있는 동안 매 프레임 호출연속 입력 (이동, 카메라 회전)
Completed키를 떼는 순간 1번만 호출입력 종료 감지

수정된 코드

void ADCCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
    if (UEnhancedInputComponent* EnhancedInput = Cast<UEnhancedInputComponent>(PlayerInputComponent))
    {
        // 연속 입력이 필요한 액션
        EnhancedInput->BindAction(MoveAction, ETriggerEvent::Triggered, this, &ADCCharacter::Move);
        EnhancedInput->BindAction(LookAction, ETriggerEvent::Triggered, this, &ADCCharacter::Look);
        
        // 단발성 액션 - Started로 변경
        EnhancedInput->BindAction(DanceAction, ETriggerEvent::Started, this, &ADCCharacter::Dance);
        EnhancedInput->BindAction(AttackAction, ETriggerEvent::Started, this, &ADCCharacter::Attack);
        EnhancedInput->BindAction(JumpAction, ETriggerEvent::Started, this, &ADCCharacter::HandleJumpTriggered);
    }
}

✅ 결과

  • Enhanced Input System에서 단발성 액션은 반드시 ETriggerEvent::Started 사용

  • 연속 입력이 필요한 경우만 ETriggerEvent::Triggered 사용

  • 입력 바인딩 시 이벤트 타입 선택이 게임 로직에 직접적인 영향을 미침

0개의 댓글