Unreal Engine GAS(Gameplay Ability System) 심화LESSON 16
Ability 부여·제거·레벨 관리 구조
난이도심화
예상 시간145분
선수지식15강의 Ability 인스턴스 정책
16강. Ability 부여·제거·레벨 관리 구조
1. 이번 강의에서 해결할 문제
Client가 Ability를 직접 Give하거나 Respawn마다 같은 Ability를 다시 지급하면 Spec 중복과 입력 중복이 생깁니다. 제거할 때 클래스만 검색하면 장비·레벨별로 지급된 정확한 Spec을 회수하기 어렵습니다.
2. 학습 목표
3. 핵심 개념
GiveAbility와 ClearAbility는 Authority에서 수행합니다. FGameplayAbilitySpecHandle은 정확한 지급 인스턴스를 가리킵니다. 장비나 Ability Set이 지급한 Handle 목록을 소유하고 해제 때 회수해야 합니다.
4. 구현
GASAbilityGrant.cpp
FGameplayAbilitySpecHandle GrantAbility(
UAbilitySystemComponent* ASC,
TSubclassOf<UGameplayAbility> AbilityClass,
int32 Level,
UObject* SourceObject)
{
if (!ASC || !ASC->IsOwnerActorAuthoritative() || !AbilityClass)
return {};
FGameplayAbilitySpec Spec(AbilityClass, FMath::Max(Level, 1));
Spec.SourceObject = SourceObject;
return ASC->GiveAbility(Spec);
}
void RemoveGrantedAbilities(
UAbilitySystemComponent* ASC,
TArray<FGameplayAbilitySpecHandle>& Handles)
{
if (!ASC || !ASC->IsOwnerActorAuthoritative()) return;
for (const FGameplayAbilitySpecHandle& Handle : Handles)
ASC->ClearAbility(Handle);
Handles.Reset();
}
레벨을 직접 수정한 Spec은 ASC Ability List Lock 안에서 찾고 MarkAbilitySpecDirty를 호출해야 복제 대상 변경이 반영됩니다. API와 잠금 방식은 현재 엔진 Header를 확인합니다.
5. 코드가 동작하는 이유
서버가 만든 Spec이 ASC의 권한 목록 원본이 되고 Client에는 필요한 활성화 정보가 복제됩니다. Handle 목록이 지급 소유권을 표현하므로 장비 해제·Class 변경·Respawn에서 정확한 Spec만 제거할 수 있습니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2Ability 부여·제거·레벨 관리 구조 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
16강. Ability 부여·제거·레벨 관리 구조 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.