Unreal Engine GAS(Gameplay Ability System) 심화LESSON 17
DataAsset 기반 Ability Set과 초기 능력 지급
난이도심화
예상 시간155분
선수지식16강의 Ability Spec 관리
17강. DataAsset 기반 Ability Set과 초기 능력 지급
1. 이번 강의에서 해결할 문제
Character Constructor에 Ability 클래스를 배열로 하드코딩하면 직업·캐릭터마다 C++ 자식이 늘어납니다. DataAsset이 Handle이나 현재 Cooldown을 저장하면 공유 에셋이 런타임 상태를 오염시킵니다.
2. 학습 목표
3. 핵심 개념
DataAsset은 Ability Class·Level·Input Tag 같은 설정 원본입니다. 실제 Spec Handle과 Active Effect Handle은 Actor별 런타임 결과 구조가 소유합니다. 에셋은 실행 중 수정하지 않습니다.
4. 구현
GASAbilitySet.h
USTRUCT(BlueprintType)
struct FGASAbilitySetEntry
{
GENERATED_BODY()
UPROPERTY(EditDefaultsOnly)
TSubclassOf<UGameplayAbility> Ability;
UPROPERTY(EditDefaultsOnly, meta=(Categories="InputTag.Ability"))
FGameplayTag InputTag;
UPROPERTY(EditDefaultsOnly, meta=(ClampMin="1"))
int32 Level = 1;
};
USTRUCT()
struct FGASAbilitySetGrantedHandles
{
GENERATED_BODY()
TArray<FGameplayAbilitySpecHandle> AbilityHandles;
void TakeFromAbilitySystem(UAbilitySystemComponent* ASC);
};
UCLASS()
class GASCOMBAT_API UGASAbilitySet : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly)
TArray<FGASAbilitySetEntry> Abilities;
void GiveToAbilitySystem(
UAbilitySystemComponent* ASC,
FGASAbilitySetGrantedHandles& OutHandles,
UObject* SourceObject) const;
};
GASAbilitySet.cpp
void UGASAbilitySet::GiveToAbilitySystem(
UAbilitySystemComponent* ASC,
FGASAbilitySetGrantedHandles& OutHandles,
UObject* SourceObject) const
{
if (!ASC || !ASC->IsOwnerActorAuthoritative()) return;
for (const FGASAbilitySetEntry& Entry : Abilities)
{
if (!Entry.Ability) continue;
FGameplayAbilitySpec Spec(Entry.Ability, Entry.Level);
Spec.SourceObject = SourceObject;
Spec.GetDynamicSpecSourceTags().AddTag(Entry.InputTag);
OutHandles.AbilityHandles.Add(ASC->GiveAbility(Spec));
}
}
Dynamic Spec Tag API는 UE5 마이너 버전에서 이름이 달라질 수 있으므로 현재 FGameplayAbilitySpec Header를 확인합니다.
5. 코드가 동작하는 이유
입력 태그가 각 Spec에 붙어 ASC가 입력 요청과 Ability를 데이터로 매칭할 수 있습니다. DataAsset은 재사용 가능한 정의만 보관하고 Actor별 Handle은 결과 구조가 보관해 공유 상태 문제를 막습니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2DataAsset 기반 Ability Set과 초기 능력 지급 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
17강. DataAsset 기반 Ability Set과 초기 능력 지급 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.