본문으로 건너뛰기
Unreal Engine GAS(Gameplay Ability System) 심화LESSON 03

GAS를 프로젝트 구조에 배치하는 기준

난이도심화
예상 시간115분
선수지식2강의 GAS 데이터 흐름

3강. GAS를 프로젝트 구조에 배치하는 기준

1. 이번 강의에서 해결할 문제​

ASC, AttributeSet, HUD, Projectile과 모든 Ability를 Character 폴더에 넣으면 재사용과 테스트가 어렵습니다. 반대로 처음부터 Module을 지나치게 나누면 API 매크로와 Build.cs 관리만 늘어납니다. 책임과 변경 이유가 같은 코드를 먼저 묶고 실제 경계가 생길 때 Module로 분리합니다.

2. 학습 목표​

3. 핵심 개념​

이 과정은 한 Runtime Module 안에서 폴더 책임을 먼저 검증합니다. 다른 프로젝트로 배포할 때는 모듈·플러그인 과정의 기준으로 Plugin 경계를 추가합니다.

Source/GASCombat/
├─ AbilitySystem/ ASC·Blueprint Library·공통 Ability
├─ Attributes/ AttributeSet·Execution Calculation
├─ Abilities/ Attack·Dash·Projectile·Heal
├─ Effects/ C++ 계산과 공통 Effect 지원
├─ Tags/ Native Gameplay Tags
├─ Data/ AbilitySet·CombatConfig DataAsset
├─ Characters/ Character·PlayerState Adapter
├─ Projectiles/ 서버 권한 Projectile
└─ UI/ HUD ViewModel·Widget 연결

4. 구현​

Public Header는 소비자가 필요한 계약만 노출합니다.

Public/AbilitySystem/GASAbilitySystemComponent.h
#pragma once

#include "AbilitySystemComponent.h"
#include "GASAbilitySystemComponent.generated.h"

UCLASS()
class GASCOMBAT_API UGASAbilitySystemComponent final
: public UAbilitySystemComponent
{
GENERATED_BODY()

public:
void AbilityInputTagPressed(const FGameplayTag& InputTag);
void AbilityInputTagReleased(const FGameplayTag& InputTag);
};

UI는 ASC를 소유하지 않고 Delegate Handle을 통해 관찰합니다. Projectile은 Damage Effect 클래스를 받아 서버에서 적용하고 특정 Character 클래스를 Include하지 않습니다. AbilitySet은 클래스와 입력 태그를 조립하지만 현재 체력 같은 인스턴스 상태를 저장하지 않습니다.

5. 코드가 동작하는 이유​

공통 ASC의 좁은 입력 API가 Enhanced Input과 Ability Spec 사이를 연결합니다. Character는 Possession Adapter, UI는 관찰자, DataAsset은 설정 원본으로 제한되어 각 계층을 별도로 시험할 수 있습니다.

6. 실패 사례와 해결​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

GAS를 프로젝트 구조에 배치하는 기준 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“GAS를 프로젝트 구조에 배치하는 기준” 기능을 확장하기 좋은 구조로 설명한 것은 무엇인가요?
  2. 문제 2“GAS를 프로젝트 구조에 배치하는 기준”의 작업 기준으로 ‘DataAsset에 CurrentHealth 저장’을 진단하거나 바로잡은 선택은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

3강. GAS를 프로젝트 구조에 배치하는 기준 미완료 상태