GAS는 어떤 문제를 해결하며 언제 도입해야 할까
1강. GAS는 어떤 문제를 해결하며 언제 도입해야 할까
1. 이번 강의에서 해결할 문제
공격 두 개뿐인 게임에 GAS를 넣으면 Plugin 설정, 태그, Effect Asset과 비동기 Ability 수명 때문에 오히려 개발이 느려질 수 있습니다. 반대로 스킬마다 비용·쿨다운·기절·면역·버프·예측을 별도 bool과 Timer로 구현하면 조합 수가 폭발합니다. 도입 결정은 유명 프로젝트 사용 여부가 아니라 현재 복잡도와 향후 변화로 내려야 합니다.
2. 학습 목표
3. 핵심 개념
GAS의 강점은 스킬 하나의 코드량을 줄이는 데 있지 않습니다. 여러 Ability가 같은 Attribute, Effect, Tag, Cue와 활성화 규칙을 공유하고 네트워크 예측·복제를 같은 계약으로 처리하는 데 있습니다. 스킬 수가 적고 상태 충돌이 거의 없으면 명시적 Component가 더 낫습니다.
| 질문 | 일반 Component가 유리 | GAS가 유리 |
|---|---|---|
| 능력 수 | 소수·고정 | 다수·지속 추가 |
| 상태 상호작용 | 독립적 | 기절·침묵·면역·중첩 조합 |
| 수치 변경 | 단순 직접 계산 | 버프·디버프·캡처·실행 계산 |
| 네트워크 | 서버 실행만으로 충분 | 소유자 예측과 보정 필요 |
| 데이터 제작 | 코드 중심 | DataAsset·Effect 조립 필요 |
4. 구현
Plugin을 활성화하고 Game Module의 빌드 의존성을 명시합니다.
PublicDependencyModuleNames.AddRange(new[]
{
"Core", "CoreUObject", "Engine",
"GameplayAbilities", "GameplayTags", "GameplayTasks"
});
도입 전 현재 전투 코드를 다음 네 열로 분류합니다.
행동: 공격, 대시, 회복
수치: 체력, 마나, 공격력, 방어력
상태: 기절, 침묵, 무적, 슬로우
표현: Montage, Niagara, Sound, HUD
상태마다 Timer·bool·RPC가 중복되고 세 열 이상이 서로 직접 참조한다면 GAS 후보입니다. 단순 점프나 문 열기처럼 엔진 기본 기능으로 충분한 행동까지 Ability로 바꾸지 않습니다.
5. 코드가 동작하는 이유
세 Module을 공개 의존성으로 추가하면 Public GAS 타입을 소비 Module에서도 해석할 수 있습니다. 도입 결정표는 기능 이름이 아니라 수명·조합·권한 복잡도를 드러내므로 과도한 도입과 뒤늦은 재작성 위험을 함께 줄입니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
GAS는 어떤 문제를 해결하며 언제 도입해야 할까 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.