사망, 부활, 팀 변경에서 GAS 상태 관리하기
40강. 사망, 부활, 팀 변경에서 GAS 상태 관리하기
1. 이번 강의에서 해결할 문제
PlayerState에 ASC를 둔 게임은 Pawn이 죽어도 ASC가 살아 있습니다. 이 장점을 정책 없이 사용하면 사망 뒤 채널링이 계속되고, 부활할 때 기본 Ability가 중복 부여되며, 이전 팀 오라가 남는 문제가 생깁니다.
2. 학습 목표
3. 핵심 개념
사망은 State.Dead Tag와 서버 권한 상태 전환으로 표현합니다. 사망 시 실행 중 Ability를 취소하고 Effect.RemoveOnDeath 정책에 맞는 Effect만 제거합니다. 계정/플레이어 수명 Cooldown을 유지할지, Pawn 수명 버프를 제거할지는 게임 규칙입니다. 새 Pawn Possess와 OnRep_PlayerState에서 InitAbilityActorInfo를 다시 호출합니다.
4. 구현
void AGASCombatCharacter::HandleDeath()
{
if (!HasAuthority()) return;
ASC->AddLooseGameplayTag(TAG_State_Dead);
FGameplayTagContainer CancelTags(TAG_Ability_Behavior_CancelOnDeath);
ASC->CancelAbilities(&CancelTags);
FGameplayTagContainer RemoveTags(TAG_Effect_RemoveOnDeath);
ASC->RemoveActiveEffectsWithGrantedTags(RemoveTags);
}
void AGASCombatCharacter::InitializeAbilityActorInfo()
{
AGASPlayerState* PS = GetPlayerState<AGASPlayerState>();
if (!PS) return;
PS->GetAbilitySystemComponent()->InitAbilityActorInfo(PS, this);
}
AbilitySet은 서버에서 한 번만 부여하고 받은 FGameplayAbilitySpecHandle과 활성 Effect Handle을 저장해 제거 가능하게 합니다. 팀 변경 시 이전 Team.* Tag와 팀 오라 Effect Handle을 제거한 뒤 새 팀 상태를 적용합니다. 부활 초기 Attribute는 별도 Initialize Effect로 서버가 설정합니다.
5. 코드가 동작하는 이유
ASC의 장기 수명과 Pawn의 짧은 수명을 구분하므로 새 Avatar가 같은 플레이어 상태를 이어받을 수 있습니다. Handle 기반 부여·제거는 중복을 막고, Tag 정책은 죽음마다 무엇을 유지할지 코드 밖 데이터와 함께 검토하게 합니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
사망, 부활, 팀 변경에서 GAS 상태 관리하기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.