게임플레이 어빌리티 시스템 프레임웍이란?
- 액터가 소유하고 발동할 수 있는 어빌리티 및 엑터 간의 익터랙션 기능을 제공하는 프레임웍
- RPG,액션 어드벤처,MOBA장르의 제작을 쉽게하기 위한 도구. 대부분의 게임 제작에 활용 가능
GAS프레임웍의 장점
- 유연성과 확장성:다양하고 복잡한 게임 제작에 대응할 수 있도록 범용적으로 설계
- 모듈러 시스템 : 각 기능에 대한 의존성이 최소화되도록 설계
- 네트워크 지원 : 네트웍 멀티플레이어 게임에서도 활용 가능하도록 설계
- 데이터 기반 설계 : 데이터를 기반으로 동작하도록 설계
- 완성도 : 포트나이트 게임 서비스를 통해 실효성 검증
GAS 프레임웍의 단점
- 배우는 학습 비용 : 구성 요소가 많아서 학습하는 비용이 꽤 큼
- 오버헤드 : 작은 규모의 프로젝트에는 복잡한 구조가 오히려 부담될 수 있음
GAS프로젝트를 진행하면서 느낀 점은 편한만큼 자세히 알아야 된다는 점이였다.
이번 정리에서는 자세히 정리할 예정이다.

언리얼 게임플레이 어빌리티 시스템 핵심 요소
- AbilitySystemComponent(ASC)
ASC(AbilitySystemComponent)는 GAS의 핵심입니다. 시스템과의 모든 상호 작용을 처리하는 UActorComponent(UAbilitySystemComponent)입니다. GameplayAbility을 사용하거나 Attribute을 가지거나, GameplayEffect를 받으려는 액터에는 반드시 ASC가 하나씩 붙어 있어야 합니다. 이러한 오브젝트는 모두 ASC 안에 존재하며, (AttributeSet에 의해 리플리케이트되는 Attribute를 제외하고) ASC에 의해 관리 및 리플리케이트됩니다.
- GamePlayTag(Tag)
FGameplayTag는 GameplayTagManager에 등록된 Parent.Child.Grandchild... 형식의 계층적 이름입니다.
보통 캐릭터의 상태(기절,회복,공격)를 나타내는데 사용됩니다.
또한 AbilitySystemComponent는 소유한 GameplayTag에 접근할 수 있는 함수를 제공하는 IGameplayTagAssetInterface를 구현합니다.상속구조로 AbilitySystemComponent에 구현되어 있습니다.
다수의 GameplayTag는 FGameplayTagContainer에 저장할 수 있습니다.
FGameplayTagContainer를 이용하여 GameplayTag를 효율적으로 관리할 수 있습니다.
- GameplayAbility
GameplayAbility(GA)는 엑터가 게임에서 할 수 있는 모든 액션 또는 스킬입니다. 예를 들어 전력 질주나 총을 쏘는 등 한 번에 두 개 이상의 GameplayAbility를 활성화할 수 있습니다. Blueprint 또는 C++로 만들 수 있습니다.
점프,질주,총 쏘기,특정 초마다 수동적으로 공격 차단하기,물약 사용 등 다양한 곳에 사용할 수 있습니다.
- GameplayEffect
GameplayEffect(GE)는 이름과 달리 파티클을 실행시키는게 아닌 자신과 다른 플레이어의 Attribute와 GameplayTag를 변경하는 통로입니다. 피해나 치유와 같은 즉각적인 어트리뷰트 변화를 일으키거나 이동 속도 부스트나 기절과 같은 장기적인 상태 버프/디버프를 적용할 수 있습니다.
쉽게 타격을 통해 상대방에게 영향을 준다를 GE를 통해 나타낼 수 있습니다.
- Attribute
Attribute는 구조체 FGameplayAttributeData에 정의된 실수값입니다. 캐릭터의 체력부터 캐릭터의 레벨, 포션의 충전 수까지 모든 것을 나타낼 수 있습니다. 액터에 속한 게임 플레이 관련 수치인 경우, Attribute를 사용하는 것을 고려해야 합니다. Attribute는 일반적으로 GameplayEffect에 의해서만 수정해야 ASC가 변경 사항을 예측할 수 있습니다.
- AbilityTask
GameplayAbilities는 한 프레임 내에서만 실행됩니다. 이것만으로는 많은 유연성을 제공하지 않습니다. 시간이 지남에 따라 발생하는 작업을 수행하거나 나중에 발생하는 delegate에 응답해야 하는 작업을 수행하려면 AbilityTasks라고 불리는 잠재적 작업을 사용합니다.
액션을 발동시킬때 애니메이션과 같이 결합이된다면 일정시간이필요하고 시간이 걸리는 작업들은 테스크와 결합해서 사용할 수 있습니다.
- GamePlayCue
게임플레이 큐(GameplayCues, GC)는 사운드 효과, 파티클 효과, 카메라 흔들림 등과 같은 비게임플레이 관련 작업을 실행합니다. 게임플레이 큐는 일반적으로 네트워크를 통해 복제되며, 명시적으로 로컬에서 실행, 추가 또는 제거되지 않는 한 예측됩니다.
ASC(AbilitySystemComponent)를 통해 GameplayCueManager에 Gameplaycue를 보냅니다.
GameplayCueNotify 객체와 IGameplayCueInterface를 구현하는 다른 액터들은 게임플레이 큐의 게임플레이 태그(GameplayCueTag)를 기반으로 이러한 이벤트에 구독할 수 있습니다.(이들을 통해 다른 객체들이 쉽게 파티클을 사용할 수 있습니다.)
어빌리티 시스템 흐름도

1. 엑터에 AbilitySystmeComponent(어빌리티 시스템총괄)와 AttributeSet(캐릭터 스탯: 체력,마나) 부여된다.
2. AbilitySystmeComponent이 GamePlayAbilty를 실행시킵니다.(예:평타 공격을 진행합니다.)
3. GameplayEffect를 발동시킵니다.이를 통해 상대의 AttributeSet(스탯)에 영향을 줄 수도 있고 나의 AttributeSet(스탯)에도 영향을 줄 수 있습니다.
4. AttributeSet은 AbilitySystmeComponent에게 정보를 넘깁니다.
번외 : GameplayEffect발동 후 AbilityTask는 사용자 요구에 맞추어 발동시킬 수 있습니다.
GamePlayCue는 GameplayEffect에 영향을 받아 진행됩니다(경험상 임의적으로 맞춰서 설정하게 됨)