내일배움캠프/TIL

TIL260605 - Unreal - GAS1

옆집히드라 2026. 6. 5. 21:00

1. 핵심 개념


TMI) 젭에서 희성님 생축함

  • UIManager 변경안
  • GAS
  • Named Slot: UMG에서 위젯은 자식을 가질 수 없는데 Named Slot을 사용하면 가능

2. 상세 내용


2.1. UIManager 변경안(메모)

기존에 만들어둔 MVP 패턴 기반 UIManager-UIBase-UIRoot 구조를 Lyra 프로젝트의 구현을 반영하고 MVVM 패턴을 적용하는 식으로 리팩토링 하려고 한다.

  • MVVM 패턴 적용: 기존 리플렉션 기반 Presenter 바인딩 구조를 엎고 MVVM 패턴을 적용한다.
  • UI Extension System(동적 UI 슬롯 주입) 반영
  • Soft Reference 기반의 지연 로딩
  • config = Game을 활용한 데이터 주도 설계 (Data-Driven):
  • Abstract 키워드로 블루프린트 강제

2.2. Input 흐름

  • UEnhancedInputLocalPlayerSubsystem에 Input Map Context 등록
  • Input Action 정의
  • 정의된 Input Action을 IMC에 등록
  • 조작 받을 폰에 IA에 맞는 논리 구현 후 SetupPlayerInputComponent에서 IMC와 바인딩

2.3. Game Ability System(GAS)

![[Pasted image 20260605151430.png]]

GAS는 어빌리티의 소유 및 활성화 기능을 제공하고 어빌리티/액터 간 상호작용을 지원하는 프레임워크이다. 기본 구조는 cpp로 잡고 자주 변겨오디는 설정이나 로직은 블루프린트를 사용하는 것을 추천한다.

GAS의 핵심 구성 요소

  • ASC: GAS를 구동하는 핵심 컴포넌트로 액터에 해당 컴포넌트를 부착하면 GAS를 사용할 수 있다. GAS의 다른 요소를 쌓아올릴 수 있는 기반 요소; ASC를 부착한 액터끼리 GAS 사용 가능
  • Gameplay Tag: 계층적인 태깅; 하나의 어빌리티에 여러 개의 게임플레이 태그를 할당한다면 Gameplay Tag Container를 사용할 수 있다.
  • GA: 모든 행동은 GA로 만들어질 수 있다. 주로 플레이어의 직접적인 입력을 통해 발동되도록 설계
  • Attrubute Set: 영구적 또는 일시적 스탯을 표시하는데 사용
  • GE: 단순한 데미지 계산을 넘어 복잡한 효과를 계산 구현 가능
  • GC(Gameplay Cue): 치장(Cosmetic) 효과 처리를 위한 시스템

GAS의 게임 플레이 루프

ASC는 모든 상호작용의 허브로 GAS의 각 컴포넌트들은 서로를 직접 참조하지 않고 ASC를 통해 통신한다.

GAS의 게임플레이 루프는 Gameplay Tag를 규칙으로 진행한다. 스킬이 시작할 때(GA), 데미지가 들어갈 때(GE) 등 모든 단계에서 태그가 검사되어서 통과 여부를 결정한다.

  • Gameplay Ability (행동): 애니메이션을 재생하고, 타겟을 찾고, 데미지 데이터를 조립하는 '행동'의 주체
  • Gameplay Effect (변화 지시): GA가 만들어낸 '데이터 명세서'입니다. 타겟의 스탯을 어떻게 바꿀지(예: 빙결 시 체력 -100)를 담고 있다.
  • Attribute Set (결과 적용): GE의 지시를 받아 실제 캐릭터의 스탯 수치(메모리 값)가 변동되는 종착지
  • Feedback (반응): 스탯이 변동되거나 타격이 적중했을 때, Gameplay Cue(얼음 깨지는 파티클/사운드)나 UI 업데이트 델리게이트를 통해 플레이어에게 시각적/청각적 피드백을 반환합니다.

이때 GAS에서의 GA는 아래와 같이 부여된다.

  • Give (부여 = 스킬 장착):
    • 상단의 Gameplay Ability Class는 에디터에서 만든 블루프린트(설계도, UClass)입니다.
    • 캐릭터가 태어날 때 이 클래스를 ASC에게 줍니다(GiveAbility). 그러면 ASC는 스킬을 즉시 실행하는 게 아니라, SpecHandle (빨간 원, FGameplayAbilitySpec)이라는 '티켓'을 발급하여 자신의 목록에 저장합니다. (RPG 게임에서 단축키 슬롯에 스킬을 올려둔 상태와 같습니다.)
  • Activate (실행 = 스킬 사용):
    • 플레이어가 단축키를 누르면 ASC는 해당 SpecHandle 티켓을 사용해 스킬을 가동시킵니다(TryActivateAbility).
    • 이때 비로소 우측의 Gameplay Ability Instance (실제 메모리에 올라가 실행되는 스킬 객체)가 만들어지거나 활성화됩니다.
  • AbilityActorInfo (문맥 정보의 전달):
    • 왼쪽 ASC 안에 있던 하얀 박스(AbilityActorInfo)가 우측 인스턴스 안으로 화살표 없이 동일하게 존재하는 것이 보이실 겁니다.
    • 이 구조체 안에는 "로직의 주인(Owner)은 누구고, 실제 월드에서 움직이는 육신(Avatar)은 누구인가?" 같은 핵심 포인터들이 들어있습니다. ASC가 스킬을 실행할 때 이 문맥 정보를 인스턴스에게 쥐여주기 때문에, 스킬 코드 내부에서 언제든 시전자의 위치나 상태를 쉽게 꺼내 볼 수 있습니다.

3. 질문 및 해결 (Q&A)


  • Component 리얼 타임에서 생성 절차
  • ActorLifeCycle
  • GameMode - GameState
  • GameMode - GameModeBase
  • GameplayMessageSubststem

4. 관련 문서 (Links)


'내일배움캠프 > TIL' 카테고리의 다른 글

TIL260609 - Unreal - GAS2  (0) 2026.06.09
TIL260608 - Unreal  (0) 2026.06.08
TIL260604 - Unreal  (0) 2026.06.04
TIL260602 - 개인  (0) 2026.06.02
TIL260601 - CPP - Move Semantic  (0) 2026.06.01