Unreal Engine GAS(Gameplay Ability System) 심화LESSON 24
SetByCaller와 데이터 기반 스킬 수치 설계
난이도심화
예상 시간140분
선수지식23강의 상태 Effect 구조
24강. SetByCaller와 데이터 기반 스킬 수치 설계
1. 이번 강의에서 해결할 문제
투사체마다 별도 Damage Effect Asset을 만들면 에셋 수가 폭증합니다. Effect 안에서 Ability 클래스를 Cast해 수치를 읽으면 재사용이 깨집니다. Effect Spec이 생성될 때 필요한 수치를 명시적으로 전달합니다.
2. 학습 목표
3. 핵심 개념
- 고정·레벨 곡선 값: Scalable Float
- 활성화 순간 Ability가 계산한 값: SetByCaller
- Source·Target Attribute에 따른 값: Capture·MMC·Execution
SetByCaller는 문자열 Name보다 중앙 GameplayTag 키를 사용합니다.
4. 구현
Damage Spec 생성
FGameplayEffectSpecHandle Spec = ASC->MakeOutgoingSpec(
DamageEffectClass, GetAbilityLevel(), ASC->MakeEffectContext());
if (Spec.IsValid())
{
const float Damage = FMath::Clamp(CalculatedDamage, 0.0f, MaxDamage);
Spec.Data->SetSetByCallerMagnitude(
GASCombatTags::Data_Damage, Damage);
}
Execution Calculation은 기본값 0과 Warn 정책으로 읽습니다.
DamageExecution.cpp 일부
const float SetByCallerDamage = Spec.GetSetByCallerMagnitude(
GASCombatTags::Data_Damage,
true,
0.0f);
Client가 전달한 Damage 값을 그대로 SetByCaller에 넣지 않습니다. 서버가 Ability 레벨, 장비, Charge 시간과 허용 범위를 다시 계산하거나 검증합니다.
5. 코드가 동작하는 이유
Spec이 한 번의 Effect 적용에 필요한 런타임 값을 소유하므로 Effect Asset을 재사용할 수 있습니다. 중앙 Tag 키가 이름 계약을 제공하고 서버 Clamp가 조작된 입력의 영향을 제한합니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2SetByCaller와 데이터 기반 스킬 수치 설계 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
24강. SetByCaller와 데이터 기반 스킬 수치 설계 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.