Company
교육 철학

UI Manager

UI 매니저 개요

UI Manager는 GameFramework의 핵심 시스템으로, 게임 애플리케이션에서 **UI 폼(화면, 창, 패널)**의 관리·로딩·표시 및 생명주기를 제어합니다.
이 시스템은 UI 요소를 계층 구조로 구성하고, 상태를 관리하며, UI 리소스를 효율적으로 재사용할 수 있는 포괄적인 솔루션을 제공합니다.
Entity 관리 → Entity Manager 참고
오디오 인터페이스 관리 → Sound Manager 참고

아키텍처 개요

1. UIManager

UIManager 클래스는 모든 UI 작업을 총괄하는 메인 컨트롤러입니다.
기능:
UI 그룹 컬렉션 유지
UI 폼 열기·닫기 처리
객체 풀(Object Pool)로 UI 폼 인스턴스 관리
리소스 매니저를 통해 UI 폼 에셋 로드
UI 폼 생명주기 이벤트 제공

2. UI 그룹

UI 그룹은 동일한 깊이(Depth) 설정을 공유하는 UI 폼 컨테이너입니다.
이를 통해 UI를 논리적 레이어(배경, 게임 UI, 팝업창 등)로 구성 가능.
특징:
고유 이름과 Depth 값 보유
우선순위 기반 UI 폼 리스트
표시/가림/일시정지 제어
그룹 내 UI 폼의 쌓이는 순서 관리

3. UI 폼

UI 폼은 개별 UI 인터페이스 요소입니다. 상태는 다음과 같습니다:
Active: 표시되고 상호작용 가능
Covered: 표시되지만 위에 다른 폼이 있음
Paused: 일시 비활성 (대개 다른 폼에 가려질 때)
Hidden: 표시되지 않음

UI 폼 생명주기

1.
Loading – 리소스에서 UI 폼 에셋 로드
2.
Initializing – 인스턴스화 및 초기화
3.
Opening – 표시되며 Active 상태로 전환
4.
Cover/Reveal – 다른 폼이 위에 나타나거나 사라짐
5.
Pause/Resume – 일시 비활성/재활성
6.
Closing – 표시에서 제거 중
7.
Recycling – 객체 풀로 반환

UI 그룹 관리

UI 그룹 사용 장점:
레이어 제어 – Depth 값으로 렌더 순서 결정
일괄 작업 – 그룹 단위로 일시정지/재개 가능
독립 스택 관리 – 각 그룹은 자체 UI 폼 스택 유지

UI 폼 열기·닫기 과정

열기

1.
요청한 UI 폼이 이미 로드 중인지 확인
2.
객체 풀에서 UI 폼 인스턴스 검색
3.
없으면 Resource Manager를 통해 로드
4.
로드 완료 시 인스턴스화 → 해당 그룹에 추가
5.
초기화 및 열기 콜백 호출
6.
UI 그룹 새로고침(상태 업데이트)

닫기

1.
해당 UI 폼을 그룹에서 제거
2.
닫기 콜백 호출
3.
그룹 새로고침
4.
객체 풀로 반환
5.
CloseUIFormComplete 이벤트 발생

객체 풀 및 리소스 관리

객체 풀: UI 폼 인스턴스 재사용
리소스 매니저 연동:
우선순위 기반 로드
진행률 보고
종속 에셋 로드
로드 작업 취소

이벤트 시스템

UI Manager는 다음 이벤트를 제공:
OpenUIFormSuccess – 성공적으로 열렸을 때
OpenUIFormFailure – 열기 실패 시
OpenUIFormUpdate – 로딩 진행률 보고
OpenUIFormDependencyAsset – 종속 에셋 로드 시
CloseUIFormComplete – 완전히 닫혔을 때

UI 폼 상태 관리

상태 변화 시:
상태 업데이트
해당 상태 콜백 호출 (OnCover, OnPause 등)
Depth 값 재조정
PauseCoveredUIForm 여부에 따라 가려진 폼 일시정지 여부 결정
UIGroup.Refresh()가 스택 위치 기반으로 상태 갱신

프레임워크 통합

UI Manager는 GameFramework 전반과 동일한 패턴 사용:
GameFrameworkModule 상속
ObjectPoolManager·ResourceManager 의존성 주입
플랫폼별 구현을 위한 Helper 인터페이스 사용
표준 이벤트 시스템 활용
객체 풀 기반 효율적 리소스 관리

사용 예시

UI 그룹 추가

uiManager.AddUIGroup("MainMenuGroup", 10, uiGroupHelper); uiManager.AddUIGroup("PopupGroup", 20, uiGroupHelper);
C#
복사

UI 폼 열기

int serialId = uiManager.OpenUIForm("MainMenu", "MainMenuGroup"); // 우선순위 + 가려진 폼 일시정지 int serialId = uiManager.OpenUIForm("SettingsPanel", "PopupGroup", 100, true, userData);
C#
복사

UI 폼 닫기

uiManager.CloseUIForm(serialId); uiManager.CloseUIForm(uiForm);
C#
복사

포커스 재설정

uiManager.RefocusUIForm(uiForm);
C#
복사

요약

UI Manager는 그룹 기반 아키텍처, 객체 풀, 상태 관리를 결합해 복잡한 UI를 효율적으로 처리하는 강력한 시스템입니다.
Resource Manager와 결합해 유연성을 유지하면서도 일관된 API로 UI를 제어할 수 있습니다.