체력 변화, 사망, 회복의 서버 권한 처리
10강. 체력 변화, 사망, 회복의 서버 권한 처리
1. 이번 강의에서 해결할 문제
여러 Periodic Damage가 같은 프레임에 Health를 0으로 만들면 사망 보상과 Montage가 중복 실행될 수 있습니다. Client HUD가 먼저 0을 봤다고 사망을 확정하거나, 사망 중 Heal Effect가 적용되면 서버 상태와 표현이 충돌합니다.
2. 학습 목표
3. 핵심 개념
Health는 복제 상태지만 사망 전이는 서버 게임 규칙입니다. Client는 Health Delegate로 UI와 표현을 갱신할 뿐 Kill·점수·Respawn을 확정하지 않습니다. State.Dead는 사망 상태의 중앙 신호이며 Infinite Effect 또는 Loose Tag 정책 중 하나를 일관되게 선택합니다.
4. 구현
void AGASCombatCharacter::HandleOutOfHealth(
AActor* DamageInstigator,
float Damage)
{
if (!HasAuthority() || bDeathStarted) return;
bDeathStarted = true;
AbilitySystemComponent->CancelAbilities();
AbilitySystemComponent->AddLooseGameplayTag(
TAG_State_Dead,
1,
EGameplayTagReplicationState::TagAndCount);
OnDeathStarted.Broadcast(DamageInstigator, Damage);
}
일반 Heal Ability는 State.Dead가 있으면 활성화할 수 없게 하고, 부활은 서버 Respawn 흐름이 Health 초기화와 Dead Tag 제거를 명시적으로 수행합니다. Loose Tag 대신 Infinite GE_Dead를 사용한다면 Handle을 저장해 제거하고 두 방식을 동시에 사용하지 않습니다.
5. 코드가 동작하는 이유
서버 Authority와 bDeathStarted가 중복 전이를 막습니다. ASC가 활성 Ability를 취소하고 Dead Tag를 가지면 입력과 새 Ability 활성화가 공통 규칙으로 차단됩니다. Client는 복제된 Health·Tag를 관찰하므로 별도 Multicast 영구 상태가 필요하지 않습니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
체력 변화, 사망, 회복의 서버 권한 처리 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.