PART 4 - 강의 1/8

GAS 아키텍처 개요

Gameplay Ability System의 핵심 구조와 설계 철학

01

Gameplay Ability System이란?

Epic Games의 검증된 게임플레이 프레임워크

Gameplay Ability System(GAS)은 Epic Games가 Fortnite와 Paragon에서 검증한 전투 및 스킬 시스템 프레임워크입니다. RPG, 액션 어드벤처, MOBA 등 게임플레이 중심 프로젝트에 적합합니다.

GAS의 장점
  • 모듈화 - 스킬, 효과, 속성을 독립적인 컴포넌트로 관리
  • 네트워크 복제 - 내장된 멀티플레이어 지원
  • 확장성 - 복잡한 상호작용도 태그 기반으로 관리
  • 디자이너 친화적 - 블루프린트로 스킬 생성 가능
C++ 필수 사항

GAS의 초기 설정(ASC, AttributeSet)은 C++로 구현해야 하지만, GameplayAbilities와 GameplayEffects는 디자이너가 블루프린트로 생성할 수 있습니다.

02

핵심 컴포넌트

GAS를 구성하는 다섯 가지 핵심 요소

AbilitySystemComponent

모든 GAS 상호작용을 관리하는 중앙 허브. 어빌리티 부여, 이펙트 적용, 태그 관리를 담당.

AttributeSet

체력, 마나, 공격력 등 수치 속성 정의. 리플리케이션과 변경 콜백 지원.

GameplayAbility

스킬, 공격 등 실행 가능한 액션. 입력 바인딩, 쿨다운, 비용 처리 포함.

GameplayEffect

속성 수정 방법 정의. 즉시 효과, 지속 효과, 무한 효과 지원.

GameplayTags

상태와 능력을 식별하는 계층적 태그 시스템. 조건부 로직의 핵심.

컴포넌트 관계도 [AbilitySystemComponent] | +---------------------+---------------------+ | | | [AttributeSet] [GameplayAbility] [GameplayTags] | | v v Health, Mana... Skills, Actions ^ | | v +--------[GameplayEffect]---------+ Damage, Buffs, Debuffs
03

프로젝트 설정

GAS 모듈 추가 및 초기 설정

YourProject.Build.cs // GAS 모듈 의존성 추가 public class MyGame : ModuleRules { public MyGame(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameplayAbilities", // GAS 핵심 "GameplayTags", // 태그 시스템 "GameplayTasks" // 어빌리티 태스크 }); } }
YourProjectGameMode.cpp (UE 5.2 이하) #include "AbilitySystemGlobals.h" void AMyGameMode::BeginPlay() { Super::BeginPlay(); // UE 5.2 이하에서는 수동 초기화 필요 // UE 5.3+에서는 자동 호출됨 UAbilitySystemGlobals::Get().InitGlobalData(); }
UE 버전별 차이

UE 5.3부터 InitGlobalData()가 자동 호출됩니다. 이전 버전에서는 GameMode의 BeginPlay에서 반드시 호출해야 합니다.

04

ASC 소유 패턴

AbilitySystemComponent 배치 전략

패턴 ASC 위치 장점 사용 사례
Character 소유 Character 클래스 간단한 설정, AI에 적합 단순 NPC, 적 AI
PlayerState 소유 PlayerState 클래스 Pawn 변경 시 ASC 유지 플레이어 캐릭터
IAbilitySystemInterface 구현 #pragma once #include "CoreMinimal.h" #include "AbilitySystemInterface.h" #include "GameFramework/Character.h" #include "MyCharacter.generated.h" UCLASS() class MYGAME_API AMyCharacter : public ACharacter, public IAbilitySystemInterface { GENERATED_BODY() public: // IAbilitySystemInterface 구현 - 필수! virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override; protected: // Character 소유 패턴 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Abilities") UAbilitySystemComponent* AbilitySystemComponent; // AttributeSet UPROPERTY() class UMyAttributeSet* AttributeSet; };
05

데이터 흐름

GAS에서 데이터가 처리되는 과정

스킬 사용 시 데이터 흐름 1. [입력] 플레이어가 스킬 버튼 누름 | v 2. [ASC] TryActivateAbility() 호출 | v 3. [GameplayAbility] CanActivateAbility() 검사 - 태그 조건 확인 - 비용(마나 등) 확인 - 쿨다운 확인 | v 4. [GameplayAbility] ActivateAbility() 실행 - 몽타주 재생 - GameplayEffect 적용 | v 5. [GameplayEffect] 대상에 효과 적용 - Execution Calculation 실행 - AttributeSet 수정 | v 6. [AttributeSet] 속성 변경 처리 - PreAttributeChange() - 클램핑 - PostGameplayEffectExecute() - 후처리 - OnRep 함수 - 클라이언트 동기화 | v 7. [UI] 속성 변경 델리게이트로 UI 업데이트
SUMMARY

핵심 요약

  • GAS는 Epic Games가 검증한 게임플레이 시스템 프레임워크
  • 다섯 핵심 요소: ASC, AttributeSet, GameplayAbility, GameplayEffect, GameplayTags
  • Build.cs에 GameplayAbilities, GameplayTags, GameplayTasks 모듈 추가 필수
  • IAbilitySystemInterface 구현으로 ASC 접근 표준화
  • 플레이어는 PlayerState 소유 패턴, AI는 Character 소유 패턴 권장
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: GAS 플러그인 활성화 및 기본 구조 파악

프로젝트에서 GameplayAbilities 플러그인을 활성화하고, Build.cs에 GameplayAbilities, GameplayTags, GameplayTasks 모듈을 추가하세요. ASC, Ability, Effect, Attribute 클래스 간의 관계를 다이어그램으로 정리하세요.

실습 2: RPG에 GAS 도입 계획 수립

RPG 전투 시스템(근접 공격, 마법, 버프/디버프, 패시브 스킬)을 GAS 프레임워크에 매핑하세요. 어떤 기능을 GameplayAbility로, 어떤 것을 GameplayEffect로, 어떤 것을 Attribute로 구현할지 설계 문서를 작성하세요.

심화 과제: GAS vs 커스텀 어빌리티 시스템 비교 분석

GAS의 장단점(네트워크 복제 내장, GameplayTag 기반 필터링, 높은 학습 곡선)을 분석하고, 순수 C++ 커스텀 어빌리티 시스템과 비교하세요. RPG 프로젝트에서 GAS가 적합한 이유를 기술적으로 정리하세요.