Unreal Engine GAS(Gameplay Ability System) 심화
스킬 클래스 사용법을 나열하지 않고 ASC의 소유권, 서버 권한 Attribute 변경, 데이터 중심 Ability·Effect, 태그 기반 상태 제어와 클라이언트 예측을 하나의 재사용 가능한 전투 시스템으로 연결합니다.
과정에서 해결하는 문제
액션 게임의 공격·스킬이 늘어나면 체력, 마나, 비용, 쿨다운, 버프, 상태 이상, 입력 차단과 시각 효과가 서로 직접 참조하기 시작합니다. 멀티플레이에서는 여기에 서버 판정, 소유 클라이언트 예측, 다른 클라이언트 표현까지 더해집니다. 이 과정은 AbilitySystemComponent를 중심으로 각 책임을 분리하고, 클라이언트가 즉각 반응하면서도 데미지·비용·쿨다운·아이템 지급의 최종 권한은 서버가 갖는 구조를 만듭니다.
GAS는 모든 작은 게임에 자동으로 필요한 기능이 아닙니다. 능력 수가 적고 상태 상호작용과 네트워크 예측이 단순하다면 일반 Component와 명시적 상태 머신이 더 작고 읽기 쉽습니다. 스킬·수치·태그·효과의 조합과 네트워크 동기화가 반복될 때 GAS의 데이터 계약과 실행 흐름이 비용을 상쇄합니다.
선수 지식
- Unreal Engine C++ 기초집 또는 동등한 C++ 프로젝트 경험
- Actor, Component, UObject, Subsystem의 수명과 책임
- Delegate와 DataAsset 기초
- GameplayTag의 계층적 이름과 Container 개념
- Unreal Engine 멀티플레이의 서버 권한, Ownership, Replication, RPC 기초
특히 PlayerState 기반 ASC와 Local Predicted Ability를 이해하려면 멀티플레이 과정의 Ownership, Server RPC, 이동 복제을 먼저 복습하는 것이 좋습니다.
권장 학습 환경
- Unreal Engine 5 계열 C++ 프로젝트와 해당 버전의 Engine Header
- Visual Studio 2022 또는 Unreal C++를 지원하는 Rider
- GameplayAbilities, GameplayTags, GameplayTasks Plugin을 활성화한 프로젝트
- PIE Listen Server + Client 두 창과 서버·클라이언트 로그를 구분할 수 있는 환경
- Git으로 변경과 검증 결과를 기록하는 별도 실습 Branch
예제는 UE 5.8 공식 문서의 개념과 API를 기준으로 작성했습니다. Gameplay Effect Component, Tag 관계 설정, Editor 메뉴와 일부 API 서명은 UE5 마이너 버전에 따라 달라질 수 있으므로 실제 프로젝트의 Engine Header와 API Reference를 최종 근거로 사용합니다.
최종 결과물
1. Attribute와 전투 자원
UGASAttributeSet이 Health, MaxHealth, Mana, MaxMana, AttackPower, Defense를 관리합니다. Damage는 Meta Attribute로 받아 Execution Calculation에서 계산하고, 서버가 실제 Health와 사망 상태를 확정합니다. HUD는 Attribute Delegate와 Tag Event를 구독하며 Tick Polling을 사용하지 않습니다.
2. 네 가지 핵심 Ability
UGA_BasicAttack, UGA_Dash, UGA_FireProjectile, UGA_Heal이 공통 C++ 기반 클래스를 사용합니다. DataAsset과 Blueprint는 수치·Montage·Projectile·Cue를 조립하지만 활성화 조건, Commit, 서버 판정과 종료 책임은 C++ 경로에 남습니다.
3. Effect·Tag·Cue 기반 상태 시스템
GE_Damage, GE_Cooldown, GE_Slow, GE_Stun과 버프·회복 Effect를 Instant, Duration, Infinite 정책에 맞게 구성합니다. State.Stunned, State.Silenced, State.Invulnerable 같은 중앙 태그가 입력과 Ability를 제어하고 Gameplay Cue는 피격·버프·스킬 표현만 담당합니다.
4. 2인 멀티플레이 전투 데모
Ability 지급 → 입력 태그 → 예측 활성화 → 서버 타깃 검증 → Effect·Attribute 변경 → Cue 표현 → HUD 갱신을 Listen Server와 Client에서 확인합니다. 지연과 패킷 손실을 적용해 예측 실패, 보정, 중복 표현과 종료 정리를 검증합니다.
주의할 점
- 클라이언트 Trace·TargetData는 입력 후보이며 데미지·점수의 최종 증거가 아닙니다.
- Attribute를 일반 멤버처럼 여기저기서 직접 수정하지 않고 서버 권한 Gameplay Effect 흐름을 사용합니다.
- Multicast RPC와 Gameplay Cue를 체력·버프·쿨다운의 유일한 저장소로 사용하지 않습니다.
CommitAbility호출 위치는 비용·쿨다운을 실제로 소비할 시점과 취소 가능 구간을 기준으로 정합니다.- Infinite Effect와 Delegate Handle은 적용·해제 경로를 쌍으로 관리해 Respawn과 Pawn 교체에서 누수를 막습니다.
- GameplayTag 문자열을 호출부마다 만들지 않고 Native Tag 또는 중앙 Tag Dictionary로 관리합니다.
47강 커리큘럼
| 강의 | 주제 | 누적 결과물 |
|---|---|---|
| 1 | GAS 도입 기준 | 전투 복잡도·도입 결정표 |
| 2 | ASC·Ability·Attribute·Effect·Tag·Cue | 전체 데이터 흐름 지도 |
| 3 | 프로젝트 구조 배치 | GASCombat 모듈 구조 |
| 4 | ASC와 Interface | GAS Actor 기본 계약 |
| 5 | Character와 PlayerState | ASC 소유 위치 결정 |
| 6 | Possession·Respawn 초기화 | Owner·Avatar 재연결 |
| 7 | AttributeSet | Attribute 기본 계약 |
| 8 | 전투 Attribute | 체력·마나·공격·방어 |
| 9 | Attribute Hook | Clamp·Meta 처리 |
| 10 | 사망·회복 서버 권한 | 생존 상태 전이 |
| 11 | 복제와 UI Delegate | 이벤트 기반 HUD |
| 12 | 전투 GameplayTag | 중앙 태그 사전 |
| 13 | 계층·Query·충돌 | 상태 관계 규칙 |
| 14 | Ability 생명주기 | 활성화·종료 흐름 |
| 15 | Instancing Policy | Ability 상태 소유 |
| 16 | 부여·제거·레벨 | 서버 Ability Spec 관리 |
| 17 | Ability Set DataAsset | 초기 능력 데이터 |
| 18 | Enhanced Input·Input Tag | 입력과 Ability 연결 |
| 19 | Activate·Commit·End | 실행 책임 기준 |
| 20 | Cost·Cooldown | 자원과 재사용 시간 |
| 21 | Effect 수명 | Instant·Duration·Infinite·Periodic |
| 22 | Modifier·Stack·Immunity | 중첩·면역 정책 |
| 23 | 버프·디버프·상태 이상 | 확장 가능한 상태 구조 |
| 24 | SetByCaller | 데이터 기반 Skill Spec |
| 25 | MMC·Execution | 계산 책임 분리 |
| 26 | 데미지 파이프라인 | 방어력·치명타 확장 |
| 27 | 기본 공격 | 서버 근접 판정 |
| 28 | 투사체·TargetData | 서버 명중 검증 |
| 29 | 대시와 CharacterMovement | 예측 이동 연결 |
| 30 | Ability Task | 비동기 수명 관리 |
| 31 | 타깃 Confirm·Cancel | 조준 상태 머신 |
| 32 | Gameplay Cue | 표현 계층 분리 |
| 33 | Cue 오용 방지 | 영구 상태와 표현 구분 |
| 34 | 복제와 Prediction Key | 예측 거래 추적 |
| 35 | Net Execution Policy | 기능별 실행 위치 |
| 36 | 예측 실패·서버 보정 | 중복 표현 디버깅 |
| 37 | Effect·Ability 복제 성능 | Replication Mode 점검 |
| 38 | RPC·Multicast·RepNotify | GAS와 일반 네트워크 경계 |
| 39 | 기절·침묵·무적 | 태그 기반 제어 |
| 40 | 사망·부활·팀 전환 | Effect·Ability 정리 |
| 41 | GAS 디버깅 도구 | 로그·콘솔·Debugger |
| 42 | 흔한 GAS 오류 | 증상별 진단표 |
| 43 | 실습 1 | Attribute·피격 시스템 완성 |
| 44 | 실습 2 | 네 가지 Ability 완성 |
| 45 | 실습 3 | 상태 이상 시스템 완성 |
| 46 | 최종 실습 | 2인 전투 데모 |
| 47 | 유지보수·다음 학습 | 도입·배포 체크리스트 |
공식 문서 기준
COURSE ORIENTATION
과정 선택 안내
- 학습 대상
- Unreal C++와 멀티플레이 기초를 Attribute·Ability·Effect·Tag·Cue 기반 전투 시스템으로 확장하려는 학습자
- 선수지식
- Unreal Engine C++ 입문과 서버 권한·Replication·RPC 기초
- 최종 결과물
- 서버 권한과 클라이언트 예측을 갖춘 2인 GAS 전투 데모