- ActionComponent
- RecoverableStat 뭐시기 API 없애고 Stat에 옮기기
- TableManager 사용 API 없애기
- NotifyState API 없애고 InputManager에게 옮겨주기
- ActionRequest가 뭔지?
사망 흐름
AMVCharacterBase::OnHitResolved가 HitResult를 받는다.- 피해 대상 캐릭터 인덱스가 자기 자신과 맞는지 검사한다. 유효하면
OnDamaged(HitData)를 브로드캐스트한다. UMVStatComponent::HandleDamaged가 먼저 HP 피해를 처리한다. 이미 죽은 상태면 무시하고, 아니라면 FinalDamage만큼 현재 HP를 깎는다.- HP가 0 이하가 되면
UMVStatComponent::BroadcastDeathStarted가 호출된다.BroadcastDeathStarted는 bIsDead = true로 바꾸고, 사망 원인과 마지막 HitData를 담은FMVDeathContext를 만든다. BroadcastDeathStarted()에서OnDeathStarted(DeathContext)와OnDead를 브로드캐스트한다.UMVDeathComponent::HandleDeathStarted가OnDeathStarted를 받는다.- 치명타(lethal hit)가
KnockDown또는Airborne계열 HitReaction 중이면, 현재 HR 액션이 끝날 때까지 사망 연출을 지연시킨다. 지연 조건이 아니거나 HR 액션이 끝나면BeginDeathPresentation이 시작된다. BeginDeathPresentation은 먼저OnDeathPresentationStarted를 브로드캐스트한다.UMVDeathRespawnFlow는 이 이벤트를 받고BeginDeathSequence를 시작한다.- 이때 UISubsystem->ClearAllUI(true)로 기존 UI를 fade out 정리하고, 사망 흐름 상태를 초기화한다.
- DeathPresentationMode가 DeathAction이면
UMVDeathComponent가 사망 액션 row를 찾아ActionComponent->TryStartActionFromRowHandle로 사망 몽타주를 재생한다. - 사망 몽타주 중 Notify가 호출되면
NotifyDeathDissolveStarted로 디졸브 효과가 시작되고,NotifyDeathOverlayRequested로 DeathOverlay 요청이 들어간다. - DeathOverlay 요청을 받은
UMVDeathRespawnFlow는UISubsystem->ShowDeathOverlay()를 호출한다. - DeathOverlay는 fade in, 유지 시간, fade out을 진행한 뒤
OnMinimumDisplayElapsed이벤트를 전파한다. MVDeathRespawnOverlayCompletionToLoadingDelaySeconds = 1.0f초 동안 지연시킨 후UMVFieldTransitionSubsystem::StartDeathRespawnTransition을 호출하는TryStartDeathRespawnTransition()를 실행한다.FieldTransitionSubsystem은 DeathRespawn 요청을 만들고 로딩 UI를 띄운다.- 로딩 중 필드 액터를 리셋하고, 마지막 체크포인트 위치를 목적지로 잡는다.
- 플레이어를 체크포인트 위치로 이동시키고, 사망 상태와 스탯을 복구한다.
- 부활 후 재생할 Standup 몽타주는 화면 전환 전에 첫 프레임으로 준비되고 pause 상태로 대기한다.
- 로딩 화면 fade out이 끝나고 화면 전환이 완료되면 UI를 기본 상태로 복원하고 입력을 GameOnly로 되돌린다.
- 마지막으로 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: 랜덤 선택 기능용 가중치 값. 현재는 값은 존재하나 사용하고 있지 않음