프로젝트 매버릭 개발일지 26일차

July 1, 2026 (2d ago)

  • ActionComponent
    • RecoverableStat 뭐시기 API 없애고 Stat에 옮기기
    • TableManager 사용 API 없애기
    • NotifyState API 없애고 InputManager에게 옮겨주기
  • ActionRequest가 뭔지?

사망 흐름

  1. AMVCharacterBase::OnHitResolved가 HitResult를 받는다.
  2. 피해 대상 캐릭터 인덱스가 자기 자신과 맞는지 검사한다. 유효하면 OnDamaged(HitData)를 브로드캐스트한다.
  3. UMVStatComponent::HandleDamaged가 먼저 HP 피해를 처리한다. 이미 죽은 상태면 무시하고, 아니라면 FinalDamage만큼 현재 HP를 깎는다.
  4. HP가 0 이하가 되면 UMVStatComponent::BroadcastDeathStarted가 호출된다. BroadcastDeathStarted는 bIsDead = true로 바꾸고, 사망 원인과 마지막 HitData를 담은 FMVDeathContext를 만든다.
  5. BroadcastDeathStarted()에서 OnDeathStarted(DeathContext)OnDead를 브로드캐스트한다.
  6. UMVDeathComponent::HandleDeathStartedOnDeathStarted를 받는다.
  7. 치명타(lethal hit)가 KnockDown 또는 Airborne 계열 HitReaction 중이면, 현재 HR 액션이 끝날 때까지 사망 연출을 지연시킨다. 지연 조건이 아니거나 HR 액션이 끝나면 BeginDeathPresentation이 시작된다.
  8. BeginDeathPresentation은 먼저 OnDeathPresentationStarted를 브로드캐스트한다.
  9. UMVDeathRespawnFlow는 이 이벤트를 받고 BeginDeathSequence를 시작한다.
  10. 이때 UISubsystem->ClearAllUI(true)로 기존 UI를 fade out 정리하고, 사망 흐름 상태를 초기화한다.
  11. DeathPresentationMode가 DeathAction이면 UMVDeathComponent가 사망 액션 row를 찾아 ActionComponent->TryStartActionFromRowHandle로 사망 몽타주를 재생한다.
  12. 사망 몽타주 중 Notify가 호출되면 NotifyDeathDissolveStarted로 디졸브 효과가 시작되고, NotifyDeathOverlayRequested로 DeathOverlay 요청이 들어간다.
  13. DeathOverlay 요청을 받은 UMVDeathRespawnFlowUISubsystem->ShowDeathOverlay()를 호출한다.
  14. DeathOverlay는 fade in, 유지 시간, fade out을 진행한 뒤 OnMinimumDisplayElapsed 이벤트를 전파한다.
  15. MVDeathRespawnOverlayCompletionToLoadingDelaySeconds = 1.0f초 동안 지연시킨 후 UMVFieldTransitionSubsystem::StartDeathRespawnTransition을 호출하는 TryStartDeathRespawnTransition()를 실행한다.
  16. FieldTransitionSubsystem은 DeathRespawn 요청을 만들고 로딩 UI를 띄운다.
  17. 로딩 중 필드 액터를 리셋하고, 마지막 체크포인트 위치를 목적지로 잡는다.
  18. 플레이어를 체크포인트 위치로 이동시키고, 사망 상태와 스탯을 복구한다.
  19. 부활 후 재생할 Standup 몽타주는 화면 전환 전에 첫 프레임으로 준비되고 pause 상태로 대기한다.
  20. 로딩 화면 fade out이 끝나고 화면 전환이 완료되면 UI를 기본 상태로 복원하고 입력을 GameOnly로 되돌린다.
  21. 마지막으로 pause 중이던 Standup 몽타주를 resume해서 부활 연출이 실제 화면에 보이도록 재생한다.

추가된 기능

  • FieldTransitionSubsystem
  • <UObject> DeathRespawnFlow
  • DeathComponent
  • DeathDissolveEffect
  • LoadingWindow에 LoadingGuideCard 섹션 추가

DeathComponent

  • BP에서 DeathDissolveEffect 설정(상속하여 커스텀 디졸브 효과 제작가능)
  • 즉시 제거, 디졸브, 랙돌 등 Death 타입 지정 가능
  • Death 몽타주 테이블 생성 후 FName 기입하여 동적으로 사망 애니메이션 선택 가능(앞/뒤, 낙사/스탠딩/다운 여부)

FieldTransitionSubsystem

  • 사망-부활, 체크포인트 이동 간 공통 로직을 관장하는 서브시스템
  • IMVFieldTransitionResettableInterface 구현체에게 필드트랜지션서브시스템이 필드 초기화 시 리셋 context 전달. 구현체는 리셋 context를 가지고 도메인에 해당하는 초기화 정책 실행(초기화/비활성화/제거)

Props 도메인

  • Teleport(체크포인트 이동/사망 후 부활), Gate_Enter 등 프로퍼티(사물)와 상호작용하는 액션은 DT_Props_P1에 모아뒀습니다

Loading창 도움말

  • GameGuide.csv로 로딩 창에서 텍스트들을 불러와 넘겨볼 수 있습니다.
    • GuideId: row key(Respawn.DeathRespawn, Combat.StaminaReserve 등)
    • GuideKind: GameplayTip/SystemHelp/CombatTip/ExplorationTip/RespawnTip
    • Priority: 로딩 카드 정렬 순서(내림차순), 같은 Priority면 GuideId 문자열 순서로 정렬
    • Weight: 랜덤 선택 기능용 가중치 값. 현재는 값은 존재하나 사용하고 있지 않음