TIL

[언리얼 GAS 이해하기] #1 ASC(Ability System Component)란?

think95592 2026. 6. 22. 20:48

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) 역할을 수행한다.


구성 예시

다음 절차를 따르면 어빌리티 시스템 컴포넌트를 활용하는 간단하면서도 일반적인 패턴을 시작할 수 있습니다.

  1. 다음과 같이 클래스를 AActor 또는 서브클래스(APawn  ACharacter 가 일반적으로 사용되는 베이스 클래스임)의 자손으로 선언하고 헤더 파일에 IAbilitySystemInterface 를 정의로 추가합니다.
  2. class AMyActor : public AActor, public IAbilitySystemInterface
  3. IAbilitySystemInterface 는 오버라이드해야 하는 단 하나의 함수인 GetAbilitySystemComponent 를 가지고 있으므로 클래스 정의에서 이 함수를 선언합니다.
  4.  
  5.  
    //~ IAbilitySystemInterface 시작
     
    /** 어빌리티 시스템 컴포넌트를 반환합니다. */
     
    virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;
     
    //~ IAbilitySystemInterface 끝
  6. 액터가 소멸되어 리스폰될 수 있는 경우에는 특히 어빌리티 시스템 컴포넌트를 플레이어 스테이트 같은 곳에 보관하는 것이 좋습니다. 이 예시에서는 편의를 위해 액터에 저장합니다.
  7.  
    /** 어빌리티 시스템 컴포넌트입니다. 게임플레이 어트리뷰트 및 게임플레이 어빌리티를 사용하려면 필요합니다. */
     
    UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = "Abilities")
     
    UAbilitySystemComponent* AbilitySystemComponent;
  8. 액터의 소스 파일에서 GetAbilitySystemComponent 함수를 작성합니다. 어빌리티 시스템 컴포넌트가 액터에 저장되어 있기 때문에 함수는 다음과 같이 매우 짧습니다.
  9.  
    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의 모든 요소를 연결하고 관리하는 중앙 컨트롤 타워이다.