Company
교육 철학

Entity Framework

엔티티 프레임워크 (Entity Framework)

관련 소스 파일

GameFramework/Base/EventPool/EventPool.cs
GameFramework/Entity/EntityManager.EntityGroup.cs
GameFramework/Entity/EntityManager.EntityInfo.cs
GameFramework/Entity/EntityManager.cs
GameFramework/Entity/IEntityGroup.cs
GameFramework/Entity/IEntityManager.cs
GameFramework/Sound/SoundManager.cs
GameFramework/UI/IUIGroup.cs
GameFramework/UI/IUIManager.cs
GameFramework/UI/UIManager.UIGroup.cs
GameFramework/UI/UIManager.cs
엔티티 프레임워크는 GameFramework에서 동적 게임 오브젝트, UI 요소, 오디오를 관리하는 종합적인 시스템입니다.
이 프레임워크는 이러한 구성 요소를 생성, 구성, 제어하는 표준화된 메커니즘을 제공하며, 그들의 라이프사이클 전반에 걸쳐 작동합니다.
이 문서는 EntityManager, UIManager, SoundManager라는 세 가지 주요 매니저로 구성된 엔티티 프레임워크의 핵심 아키텍처와 기능에 초점을 맞춥니다.
이 매니저들이 의존하는 리소스 관리(Resource Management) 시스템에 대한 정보는 Resource Management 문서를 참고하세요.

아키텍처 개요 (Architecture Overview)

엔티티 프레임워크는 세 가지 주요 하위 시스템(Entity, UI, Sound)에서 일관된 아키텍처 패턴을 따릅니다.
각 하위 시스템은 중앙 집중식 매니저를 가지고 있으며, 이 매니저는 요소를 논리적 그룹으로 조직하고, 리소스를 관리하며, 라이프사이클 이벤트를 제공합니다.

공통 설계 패턴 (Common Design Pattern)

엔티티 프레임워크의 세 매니저는 공통적으로 다음 설계 원칙을 따릅니다.
그룹 기반 조직: 요소들은 관리 효율성을 위해 이름이 있는 그룹으로 조직됩니다.
리소스 기반 인스턴스화: 요소들은 ResourceManager를 통해 애셋에서 로드됩니다.
오브젝트 풀링(Object Pooling): 효율적인 객체 재사용을 위해 오브젝트 풀을 활용합니다.
이벤트 기반 통신: 상태 변경에 대한 이벤트 기반 알림을 제공합니다.
헬퍼 인터페이스 패턴: 플랫폼별 구현은 헬퍼 인터페이스를 통해 지원됩니다.

엔티티 관리 시스템 (Entity Management System)

엔티티 관리 시스템은 게임 세계의 게임 오브젝트(Entity)를 생성, 조직, 제어하는 역할을 합니다.
엔티티(Entity)는 캐릭터, 소품, 이펙트, 상호작용 가능한 요소 등 게임 환경에 존재하는 모든 객체를 의미합니다.

엔티티 아키텍처 (Entity Architecture)

엔티티 그룹(Entity Group)

엔티티는 이름이 있는 그룹으로 조직됩니다.
각 그룹은 다음 기능을 가집니다:
자체 오브젝트 풀을 유지
자동 해제 간격, 용량, 만료 시간 설정
그룹 내 엔티티 추적 및 관리

엔티티 라이프사이클 (Entity Lifecycle)

1.
생성: ShowEntity 호출 (엔티티 ID, 애셋 이름, 그룹 이름 지정)
2.
로딩: ResourceManager를 통해 리소스 로드
3.
초기화: 엔티티 초기화 후 그룹에 추가
4.
업데이트: 매 프레임 업데이트 호출
5.
부착(옵션): 부모 엔티티에 부착 가능
6.
숨김: HideEntity 호출
7.
재활용: 엔티티 인스턴스를 오브젝트 풀로 반환

부모-자식 관계 (Parent-Child Relationship)

엔티티 간 계층 구조를 지원
부모 엔티티에 부착(Attach)
부모로부터 분리(Detach)
계층 탐색 가능
복합 객체, 캐릭터 부착물 등 복잡한 구조 구현 가능

UI 관리 시스템 (UI Management System)

UI 관리 시스템은 UI 요소를 생성, 표시, 제어하는 프레임워크를 제공합니다.
UI Form 로딩, 표시, 상호작용 등을 관리합니다.

UI 아키텍처 (UI Architecture)

UI 그룹(UI Group)

UI Form은 그룹으로 조직되며, 그룹은 다음 기능을 가집니다:
렌더링 순서를 결정하는 깊이(Depth) 값 설정
UI Form 스택 유지
활성/일시정지/가림 상태 제어
동일 그룹 내 포커스 관리

UI Form 라이프사이클 (UI Form Lifecycle)

1.
열기: OpenUIForm 호출 (애셋 이름, 그룹 이름)
2.
로딩: ResourceManager를 통한 리소스 로드
3.
인스턴스화: 인스턴스 생성 또는 풀에서 재사용
4.
활성화: 그룹에서 활성 상태 전환
5.
포커스 관리: 포커스, 가림, 일시정지 처리
6.
닫기: CloseUIForm 호출
7.
재활용: 인스턴스 오브젝트 풀 반환

UI 깊이(Depth) 관리

그룹 깊이 값에 따라 그룹 전체의 렌더링 순서 결정
그룹 내에서는 오픈 순서대로 UI Form 스택 구성
Refocus로 특정 Form을 맨 위로 가져올 수 있음
가려진 Form을 일시정지하여 성능 최적화

사운드 관리 시스템 (Sound Management System)

사운드 관리 시스템은 게임 내 오디오 로드, 재생, 제어를 담당합니다.

사운드 아키텍처 (Sound Architecture)

사운드 그룹(Sound Group)

그룹 단위로 볼륨, 음소거, 우선순위 제어
동시 재생을 위한 다수의 사운드 에이전트 보유
사운드 교체 정책 설정
음악, 효과음, 환경음 등 카테고리별 관리

사운드 라이프사이클 (Sound Lifecycle)

1.
재생: PlaySound 호출 (애셋 이름, 그룹 이름)
2.
로딩: ResourceManager를 통한 로드
3.
에이전트 할당: 지정 그룹의 사운드 에이전트가 재생
4.
제어: 일시정지, 재개, 정지 가능
5.
해제: 사용이 끝난 사운드 리소스 해제

다른 시스템과의 통합 (Integration with Other Systems)

리소스 관리와의 통합
EntityManager → 엔티티 프리팹 로드
UIManager → UI Form 프리팹 로드
SoundManager → 오디오 애셋 로드
비동기 로딩, 의존성 관리, 리소스 업데이트 지원
오브젝트 풀과의 통합
EntityManager, UIManager → 인스턴스 풀링 재사용
성능 향상, GC 부담 감소
이벤트 시스템과의 통합
로딩 성공/실패 이벤트
라이프사이클 상태 변경 이벤트
비동기 진행률 이벤트
느슨한 결합(Loose Coupling) 구현

요약 (Summary)

엔티티 프레임워크는 엔티티, UI, 사운드를 세부적으로 관리하는 강력한 시스템이며,
다음과 같은 특징을 가집니다.
모든 시스템에 걸친 일관된 아키텍처
그룹 기반의 논리적 분리
효율적 메모리 사용을 위한 오브젝트 풀
이벤트 기반의 느슨한 결합 구조
엔티티의 부모-자식 관계 지원
UI 깊이 및 포커스 관리
사운드 볼륨 및 우선순위 제어