ASC란?
ASC(Ability System Component)는 GAS(Gameplay Ability System)의 중앙 관리자이다.
한 줄로 표현하면,
"Ability, Effect, Attribute, Tag를 관리하는 GAS의 컨트롤 타워"
라고 할 수 있다.
왜 ASC가 필요할까?
게임 캐릭터는 다양한 기능을 가지고 있다.
예를 들어 달리기 기능만 생각해 보자.
입력
↓
PlayerCharacter
↓
StatComponent
↓
이동속도 증가
↓
스태미나 감소
하나의 기능을 처리하기 위해 여러 클래스와 컴포넌트가 관여하게 된다.
기능이 많아질수록 관리도 복잡해진다.
GAS는 이러한 상태 관리와 능력 관리를 하나의 시스템으로 통합했고,
그 중심에 ASC가 존재한다.
ASC를 비유하면?
마트 게임으로 비유하면 ASC는 점장이다.
직원들은 각각 자신의 일을 하지만 모든 보고와 승인은 점장을 거친다.
ASC (점장)
├─ Ability
├─ Effect
├─ Attribute
└─ Tag
예를 들어 플레이어가 달리기를 시작하면
Sprint Ability
↓
ASC에 실행 요청
↓
ASC 승인
↓
이동속도 증가
↓
State.Sprinting 추가
모든 과정이 ASC를 중심으로 이루어진다.
ASC가 관리하는 것
1. Ability (행동)
캐릭터가 수행할 수 있는 행동이다.
예시
- Sprint
- Attack
- Steal
- Drink
ASC
└─ Sprint Ability 보유
Ability는 "무엇을 할 수 있는가"를 의미한다.
2. Attribute (능력치)
캐릭터의 수치 데이터이다.
예시
- HP
- Stamina
- MoveSpeed
- Fatigue
ASC
└─ AttributeSet
├─ HP = 100
├─ Stamina = 80
└─ MoveSpeed = 600
실제로는 AttributeSet 안에 저장된다.
3. Effect (버프 / 디버프)
Attribute를 변경하는 효과이다.
예시
- 에너지 드링크
- 독
- 피로도 증가
- 이동속도 버프
ASC
└─ Active Effects
├─ SpeedBuff
└─ FatigueDebuff
Effect는 직접 능력치를 변경하는 역할을 담당한다.
4. Tag (상태)
캐릭터의 현재 상태를 표현한다.
예시
- State.Sprinting
- State.Stunned
- State.Dead
ASC
└─ Active Tags
├─ State.Sprinting
└─ State.Burning
Tag는 "현재 어떤 상태인가?"를 나타낸다.
실제 실행 흐름
플레이어가 Shift를 눌러 달리기를 시작한다고 가정해 보자.
① 입력 발생
Shift 입력
② ASC에게 Ability 실행 요청
ASC
↓
ActivateAbility(Sprint)
③ 실행 가능 여부 확인
ASC가 검사한다.
- 스태미나가 충분한가?
- 기절 상태가 아닌가?
- 다른 행동에 의해 막혀있지 않은가?
④ Sprint Ability 실행
Sprint Ability 시작
⑤ GameplayEffect 적용
MoveSpeed +50%
⑥ GameplayTag 추가
State.Sprinting
⑦ 스태미나 소모
Stamina 감소
이 모든 과정이 ASC를 중심으로 진행된다.
우리 프로젝트에 적용하면?
플레이어와 NPC 모두 ASC를 가질 수 있다.
Player
└─ ASC
Security Guard
└─ ASC
예를 들어 보안요원이 테이저를 사용하면
보안요원 ASC
↓
Taser Ability 실행
↓
플레이어 ASC 대상 지정
↓
Stun Effect 적용
↓
State.Stunned 추가
결과적으로 플레이어는 행동 불가 상태가 된다.
팀 프로젝트에서 자주 듣게 될 말
"ASC에 Ability 등록했어요"
플레이어가 해당 행동을 사용할 수 있게 되었다는 뜻
"ASC에 Effect 적용하세요"
버프 또는 디버프를 적용하라는 뜻
"ASC의 Tag 확인하세요"
현재 상태를 확인하라는 뜻
예시
State.Stunned 존재 여부 확인
왜 ASC가 GAS의 핵심인가?
GAS의 주요 요소인
- Ability
- Effect
- Attribute
- Tag
모두 ASC를 통해 동작한다.
즉,
ASC 이해
↓
Ability 이해
↓
Effect 이해
↓
Attribute 이해
↓
Tag 이해
순서로 학습하면 GAS를 훨씬 쉽게 이해할 수 있다.
ASC는 단순한 컴포넌트가 아니라,
GAS 전체를 연결하는 중앙 관리자이자 허브(Hub) 역할을 수행한다.
구성 예시
다음 절차를 따르면 어빌리티 시스템 컴포넌트를 활용하는 간단하면서도 일반적인 패턴을 시작할 수 있습니다.
- 다음과 같이 클래스를 AActor 또는 서브클래스(APawn 및 ACharacter 가 일반적으로 사용되는 베이스 클래스임)의 자손으로 선언하고 헤더 파일에 IAbilitySystemInterface 를 정의로 추가합니다.
- class AMyActor : public AActor, public IAbilitySystemInterface
- IAbilitySystemInterface 는 오버라이드해야 하는 단 하나의 함수인 GetAbilitySystemComponent 를 가지고 있으므로 클래스 정의에서 이 함수를 선언합니다.
-
//~ IAbilitySystemInterface 시작 /** 어빌리티 시스템 컴포넌트를 반환합니다. */ virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override; //~ IAbilitySystemInterface 끝 - 액터가 소멸되어 리스폰될 수 있는 경우에는 특히 어빌리티 시스템 컴포넌트를 플레이어 스테이트 같은 곳에 보관하는 것이 좋습니다. 이 예시에서는 편의를 위해 액터에 저장합니다.
-
/** 어빌리티 시스템 컴포넌트입니다. 게임플레이 어트리뷰트 및 게임플레이 어빌리티를 사용하려면 필요합니다. */ UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = "Abilities") UAbilitySystemComponent* AbilitySystemComponent; - 액터의 소스 파일에서 GetAbilitySystemComponent 함수를 작성합니다. 어빌리티 시스템 컴포넌트가 액터에 저장되어 있기 때문에 함수는 다음과 같이 매우 짧습니다.
-
UAbilitySystemComponent* AMyActor::GetAbilitySystemComponent() const { return AbilitySystemComponent; }
https://dev.epicgames.com/documentation/unreal-engine/gameplay-ability-system-component-and-gameplay-attributes-in-unreal-engine
정리
ASC (Ability System Component)
- GAS의 중앙 관리자
- Ability, Effect, Attribute, Tag 관리
- 플레이어와 NPC 모두 보유 가능
관리 대상
- Ability : 행동
- Attribute : 능력치
- Effect : 버프 / 디버프
- Tag : 상태
실행 흐름
입력
↓
ASC
↓
Ability 실행
↓
GameplayEffect 적용
↓
Attribute 변경
↓
GameplayTag 추가/제거
핵심 한 문장
ASC는 GAS의 모든 요소를 연결하고 관리하는 중앙 컨트롤 타워이다.
'TIL' 카테고리의 다른 글
| [언리얼 GAS 이해하기] #3 Attribute와 float 변수의 차이 (0) | 2026.06.24 |
|---|---|
| [언리얼 GAS 이해하기] #2 AttributeSet은 왜 따로 존재할까? (0) | 2026.06.23 |
| [C++] - 가장 가까운 같은 글자 (2) | 2026.06.18 |
| 언리얼 EQS(Environment Query System)를 공부하며 이해한 것 (0) | 2026.06.15 |
| [TIL] 언리얼 C++ & 코드카타 학습 정리 (0) | 2026.06.12 |