1. 핵심 개념

- 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(실제 메모리에 올라가 실행되는 스킬 객체)가 만들어지거나 활성화됩니다.
- 플레이어가 단축키를 누르면 ASC는 해당
- AbilityActorInfo (문맥 정보의 전달):
- 왼쪽 ASC 안에 있던 하얀 박스(
AbilityActorInfo)가 우측 인스턴스 안으로 화살표 없이 동일하게 존재하는 것이 보이실 겁니다. - 이 구조체 안에는 "로직의 주인(Owner)은 누구고, 실제 월드에서 움직이는 육신(Avatar)은 누구인가?" 같은 핵심 포인터들이 들어있습니다. ASC가 스킬을 실행할 때 이 문맥 정보를 인스턴스에게 쥐여주기 때문에, 스킬 코드 내부에서 언제든 시전자의 위치나 상태를 쉽게 꺼내 볼 수 있습니다.
- 왼쪽 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 |