들어가며

GAS란 액터가 소유하고 발동할 수 있는 어빌리티 및 액터 간의 인터렉션 기능을 제공하는 프레임워크입니다. GAS를 학습하는 초기 비용만 투입한다면 다양한 장르의 게임을 쉽게 제작할 수 있어 유용합니다.

GAS란 결국 Ability를 발동하고 그 결과를 처리하는 프레임워크인데요. GAS에서 Ability란 캐릭터가 수행할 수 있는 특수한 행동을 정의한 클래스입니다. 간단하게는 스킬이라고 생각할 수 있겠네요.

먼저 GAS의 구성요소들을 살펴보면서 Ability의 관리부터 발동, 체력 감소 등의 결과 처리, 사운드 재생 등을 담당하는 클래스들을 알아보겠습니다.

GAS의 구성요소

GAS의 구성요소는 생각보다 간단하고 직관적입니다. 기본적으로 게임에서 화염구 스킬을 생각해보면 발동을 위해 다음의 과정을 거칠 것입니다.

  /*
0. 유저 입력
1. 쿨타임 체크 및 마나 감소 (GameplayEffect)
2. 화염구 생성 및 타격 ()
3. 데미지 적용 (GameplayEffect(데미지) 및 AttributeSet(스탯))
4. 폭발음 발생 (GameplayCue)
*/
  
  [Actor]
 └── AbilitySystemComponent (ASC)
       ├── 보유 Ability 목록
       ├── AttributeSet (스탯 정의)
       └── GameplayEffects 관리

[GameplayAbility]
 └── 능력 실행 로직 (애니메이션, 데미지 등)
      ├── AbilityTask 호출 (비동기 작업: 대기, 애님, 타이머 등)
      └── GameplayEffect 적용 (스탯 변화)
           └── GameplayCue 호출 (비주얼/사운드)
  
  1. AbilitySystemComponent

    • GAS의 핵심 컴포넌트로, 액터에 부착되어 능력과 효과를 처리한다.

    • Ability 발동, 속성(Attribute) 관리, 효과(GameplayEffect) 적용을 담당한다.

    • 서버와 클라이언트 간의 동기화를 자동으로 처리해준다.

  2. 보유 Ability 목록

    • ASC에 등록된 사용 가능한 GameplayAbility들의 리스트다.

    • 능력은 태그나 조건에 따라 활성화 또는 비활성화된다.

    • 서버에서 부여하고, 클라이언트와 동기화된다.

  3. AttributeSet

    • 캐릭터의 체력, 공격력, 마나 등 속성을 정의한 클래스다.

    • GameplayEffect를 통해 수치가 변경된다.

    • 속성 변경 시 ASC를 통해 알림이 전파된다.

  4. GameplayEffect

    • Ability에 의해 적용되는 데미지, 버프, 디버프 등의 효과 정의 클래스다.

    • 즉시/지속/주기적 효과와 스탯 변경 등을 지원한다.

    • ASC를 통해 타겟에게 적용되고 관리된다.

  5. GameplayAbility

    • 특정 행동(스킬, 점프, 회복 등)의 실행 로직을 정의하는 클래스다.

    • 발동 조건, 쿨타임, 비용, 적용 효과 등을 설정할 수 있다.

    • 내부에서 AbilityTask를 사용해 비동기 동작을 처리한다.

  6. AbilityTask

    • GameplayAbility 내부에서 타이머, 대기, 입력 등 비동기 처리를 도와주는 도구다.

    • 애니메이션 대기, 타겟 선택, 일정 시간 후 실행 등에 사용된다.

    • 능력의 흐름 제어를 비동기적으로 유연하게 만든다.

  7. GameplayCue

    • GameplayEffect나 Ability에 연동되어 작동하는 시각/청각 이펙트 시스템이다.

    • 이펙트 시작/중단 시 자동 호출되어 FX나 사운드를 출력한다.

    • 서버는 Cue를 호출하고, 클라이언트에서 재생된다.

마무리

이렇게 간단하게 GAS에 대해 알아보았는데 조금 더 실전적인 예제와 구성 방법을 이어서 서술해보겠습니다.