최종 실습 2: 전투 Ability 네 종 완성
44강. 최종 실습 2: 전투 Ability 네 종 완성
1. 이번 강의에서 해결할 문제
전투 Ability를 각각 작동시키는 것만으로는 완성된 시스템이 아닙니다. 부여 데이터, 입력 Tag, Cost·Cooldown, TargetData, 서버 판정, Cue가 같은 규칙을 사용해야 하며 사망·재Spawn 때 중복되지 않아야 합니다.
2. 학습 목표
3. 핵심 개념
GA_BasicAttack은 Montage Event 시점에 서버 Trace를 검증하고 데미지 Effect를 적용합니다. GA_Dash는 이동 표현을 예측하되 충돌·Cost·Cooldown을 서버가 승인합니다. GA_FireProjectile은 클라이언트 조준 TargetData를 서버가 검증하고 권한 투사체를 Spawn합니다. GA_Heal은 자기 대상 Effect로 Health를 회복합니다.
4. 구현
USTRUCT(BlueprintType)
struct FGASAbilityEntry
{
GENERATED_BODY()
UPROPERTY(EditDefaultsOnly)
TSubclassOf<UGameplayAbility> AbilityClass;
UPROPERTY(EditDefaultsOnly)
FGameplayTag InputTag;
UPROPERTY(EditDefaultsOnly, meta=(ClampMin="1"))
int32 AbilityLevel = 1;
};
UCLASS(BlueprintType)
class GASDEMO_API UGASAbilitySet : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly)
TArray<FGASAbilityEntry> Abilities;
};
FGameplayAbilitySpec Spec(Entry.AbilityClass, Entry.AbilityLevel);
Spec.GetDynamicSpecSourceTags().AddTag(Entry.InputTag);
const FGameplayAbilitySpecHandle GrantedHandle = ASC->GiveAbility(Spec);
OutGrantedHandles.Add(GrantedHandle);
데이터 에셋에는 Input.Attack.Primary, Input.Movement.Dash, Input.Ability.Projectile, Input.Ability.Heal을 배치합니다. 입력 컴포넌트는 Tag pressed/released를 ASC에 전달하고 Ability 클래스 이름을 직접 비교하지 않습니다. UE5 마이너 버전에 따라 Dynamic Spec Tag 접근 API가 달라질 수 있으므로 현재 GameplayAbilities 헤더를 확인합니다.
| Ability | 예측 | 서버 확정 | 지속 상태 |
|---|---|---|---|
| BasicAttack | Montage/Cue | Trace·Damage | Cost·Cooldown |
| Dash | 입력 반응/표현 | Commit·충돌 규칙 | Cooldown |
| FireProjectile | 조준 프리뷰 | Target 검증·Spawn·Damage | Cost·Cooldown |
| Heal | 즉시 UI 예고 선택 | Heal Effect 적용 | Health Attribute |
5. 코드가 동작하는 이유
AbilitySet은 무엇을 부여할지, ASC는 어떤 입력 Tag가 눌렸는지, 각 Ability는 어떻게 실행할지를 분리합니다. 네 Ability 모두 영구 결과를 Effect/Attribute로 남기므로 Cue 유실이나 UI 재생성에도 전투 상태가 보존됩니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
최종 실습 2: 전투 Ability 네 종 완성 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.