티스토리 뷰
Game UI Architecture
게임에는 체력, 마나, 레벨, 스킬 정보 등 수많은 데이터가 존재하고 이러한 데이터는 UI(위젯)에 표시되어야 한다.
위젯이 해당 데이터들을 가져오기 위해서는 Character, PlayerState, AbilitySystemComponent, AttributeSet 등에 직접 접근하여 가여올 수 있다.
하지만, 이러한 방법은 구조가 복잡해지고 의존성이 즈아가혐, 유지보수가 어려워지기에 좋은 방법이 아니다.
해결 방안
Model, View, Controller로 분리되는 MVC 구조를 활용할 것이다.
Model
실제 데이터
체력 값, 마나 값, 경험치 등
View
화면에 보여지는 것 (위젯)
체력바, 마나바, 스킬 아이콘 등
Controller
Model <> View 연결 역할
데이터를 가져와서 가공하며, 이를 UI에 전달
만약 위젯이 직접 Model이 접근하는 경우 아래와 같은 문제가 발생할 수 있다.
Widget → Character → PlayerState → ASC → AttributeSet
코드가 엉킬 수 있으며, 변경에 취약
따라서 Model과 View 사이에 Controller를 도입하여 활용하며, 이것이 MVC 구조의 마지막 C에 해당한다.
특히 UI는 단순 정보 표시만 하는 것이 아닌, 버튼 클릭 및 스킬 사용과 같은 역할도 한다.
이때도 마찬가지로 Controller가 중개자 역할을 하여, View를 통해 버튼을 클릭하고 Model 값을 변경하게 된다.
단방향 종속성
중요한 점은 MVC 구조가 단방향 종속성을 유지해야 한다는 것이다.
Model → Controller → View(Widget)
1️.Model
Controller 몰라야 함
Widget 몰라야 함
그냥 데이터만 있음
-> 체력 100의 값만 알면 됨
2️.Controller
Model은 앎
Widget은 몰라도 됨
->체력 가져와서 전달할 것 까지만
3️.Widget
Controller에 의존
데이터 받아서 표시
Model은 데이터를 표현하는 역할만 하며,
어떤 Controller나 Widget이 이 데이터를 사용하는지 전혀 알 필요가 없다.
Controller는 Model로부터 데이터를 가져와 외부로 전달하지만, 그 데이터를 어떤 Widget이 사용하는지는 알지 못한다.
대신 Widget이 Controller에 직접 연결되어 데이터를 받아 사용한다.
이 구조 덕분에 Controller를 수정하지 않고도 Widget을 교체할 수 있고, Model을 변경하지 않고도 Controller를 교체할 수 있다.
구현 목표
우리는 현재 프로젝트에서 MVC를 다음과 같이 구현할 것이다.
1.Widget (View)
실제 UI
표시 담당
2.WidgetController (Controller)
데이터 가져옴
위젯에 전달
입력 처리
3.Model
AttributeSet
PlayerState
AbilitySystem
구현 예정
이제 앞으로 다음과 같은 항목들을 만들어 나갈 것이다.
1.커스텀 UserWidget
UI 기본 클래스
2️.WidgetController
데이터 처리 담당
3. HUD
전체 연결 담당
최종적으로는 UI가 AttributeSet -> Controller -> Widget 과 같은 형태로 동작하도록 구현할 것이다.
'Unreal > Udemy 강의' 카테고리의 다른 글
| Gameplay Ability System - Top Down RPG / Section 5-2 (0) | 2026.03.20 |
|---|---|
| Gameplay Ability System - Top Down RPG / Section 4-4 (0) | 2026.03.18 |
| Gameplay Ability System - Top Down RPG / Section 4-3 (0) | 2026.03.17 |
| Gameplay Ability System - Top Down RPG / Section 4-2 (0) | 2026.03.15 |
| Gameplay Ability System - Top Down RPG / Section 3-8 (0) | 2026.03.13 |
