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를 제어할 수 있습니다.