Company
교육 철학

Entity Manager

Entity Manager

관련 소스 파일
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
Entity Manager는 게임 엔티티 생성, 관리, 파괴를 처리하는 GameFramework의 핵심 시스템입니다.
게임 오브젝트의 생명주기계층 구조를 체계적으로 관리하며, UI 관리자는 UI 전용 관리, 사운드 관리자는 사운드 전용 관리를 담당합니다.

개요 (Overview)

Entity Manager는 다음과 같은 기능을 수행하는 중앙 시스템입니다.
에셋에서 게임 엔티티 생성 및 표시
엔티티를 논리적 그룹으로 조직
엔티티 간 부모-자식 관계 관리
엔티티 생명주기 이벤트 처리
오브젝트 풀을 통한 엔티티 인스턴스 재활용

핵심 아키텍처

다른 GameFramework 시스템과 동일하게 모듈형 디자인 패턴을 따릅니다.

Entity Manager

EntityManager 클래스는 IEntityManager 인터페이스를 구현한 핵심 구성요소입니다.
역할:
m_EntityInfos 딕셔너리로 활성 엔티티 추적
m_EntityGroups 딕셔너리로 엔티티 그룹 관리
리소스 매니저와 협력하여 엔티티 로딩
엔티티 재활용 및 풀링 관리
부모-자식 관계 관리
생명주기 이벤트 브로드캐스트

엔티티 그룹 (Entity Groups)

엔티티 그룹은 관련 엔티티를 묶는 컨테이너입니다.
각 그룹은 고유한 인스턴스 풀을 가집니다.
속성:
Name: 그룹 식별자
EntityCount: 그룹 내 엔티티 개수
InstanceAutoReleaseInterval: 풀 자동 해제 주기
InstanceCapacity: 풀 최대 용량
InstanceExpireTime: 미사용 인스턴스 만료 시간
InstancePriority: 풀 해제 우선순위
Helper: 그룹 헬퍼 구현체

엔티티 정보 추적 (EntityInfo)

EntityManager는 EntityInfo 클래스를 통해 엔티티 상태를 내부적으로 추적합니다.

엔티티 생명주기

엔티티는 생성 → 표시 → 숨김 → 재활용 과정을 거칩니다.

엔티티 표시 (ShowEntity)

절차:
1.
ShowEntity() 호출 (ID, 에셋 이름, 그룹 이름 지정)
2.
풀에 인스턴스 존재 여부 확인
3.
없으면 리소스 매니저로 에셋 로드
4.
로드 성공 시 엔티티 초기화
5.
해당 그룹에 추가
6.
OnInit(), OnShow() 콜백 실행
7.
ShowEntitySuccess 이벤트 발생

엔티티 숨김 (HideEntity)

절차:
1.
HideEntity() 호출 (ID 또는 참조)
2.
로딩 중이면 release-on-load 리스트에 추가
3.
아니면 InternalHideEntity() 호출
4.
OnHide() 콜백 실행
5.
재활용 큐에 추가
6.
HideEntityComplete 이벤트 발생

엔티티 재활용

업데이트 루프에서 재활용 큐 처리:
1.
큐에서 엔티티 꺼내기
2.
상태를 WillRecycle로 변경
3.
OnRecycle() 콜백 실행
4.
상태를 Recycled로 변경
5.
인스턴스를 해당 그룹 풀에 반환
6.
EntityInfo 해제

엔티티 계층 구조

부모-자식 관계를 지원합니다.

AttachEntity

자식 엔티티에 부모 참조 설정
부모의 자식 리스트에 추가
부모 OnAttached() 호출
자식 OnAttachTo() 호출

Query

GetParentEntity()
GetChildEntityCount()
GetChildEntity()
GetChildEntities()

DetachEntity

부모의 자식 리스트에서 제거
자식의 부모 참조 제거
부모 OnDetached() 호출
자식 OnDetachFrom() 호출

다른 시스템과의 통합

오브젝트 풀

각 엔티티 그룹은 전용 풀 보유
필요 시 풀에서 생성
숨길 때 풀에 반환
그룹별 파라미터 설정 가능

리소스 매니저

에셋 로딩 위임
로드 성공/실패 콜백 처리

이벤트 시스템

ShowEntitySuccess
ShowEntityFailure
ShowEntityUpdate
ShowEntityDependencyAsset
HideEntityComplete

다른 매니저와 비교

기능
Entity Manager
UI Manager
Sound Manager
그룹 개념
Entity Groups
UI Groups
Sound Groups
에셋 로딩
Resource Manager
Resource Manager
Resource Manager
인스턴스 풀
Entity Instances
UI Form Instances
Sound Agents
헬퍼 인터페이스
IEntityHelper
IUIFormHelper
ISoundHelper
그룹 헬퍼
IEntityGroupHelper
IUIGroupHelper
ISoundGroupHelper
부모-자식 지원
O
X
X
생명주기 이벤트
Show/Hide
Open/Close
Play/Stop

사용 가이드

초기화

entityManager.SetObjectPoolManager(objectPoolManager); entityManager.SetResourceManager(resourceManager); entityManager.SetEntityHelper(entityHelper); entityManager.AddEntityGroup(groupName, autoReleaseInterval, capacity, expireTime, priority, groupHelper);
C#
복사

엔티티 기본 조작

entityManager.ShowEntity(entityId, entityAssetName, entityGroupName); entityManager.HideEntity(entityId); bool exists = entityManager.HasEntity(entityId); IEntity entity = entityManager.GetEntity(entityId);
C#
복사

계층 조작

entityManager.AttachEntity(childEntityId, parentEntityId); entityManager.DetachEntity(childEntityId); IEntity parent = entityManager.GetParentEntity(childEntityId); IEntity[] children = entityManager.GetChildEntities(parentEntityId);
C#
복사
원하시면 제가 이 내용을 구조도와 시각 자료까지 포함해서 정리된 문서 형태로 만들어 드릴 수도 있습니다.
그렇게 하면 Entity Manager의 전체 흐름을 UI, 사운드 매니저와의 비교까지 한눈에 볼 수 있게 할 수 있습니다.
혹시 그림까지 같이 제작해 드릴까요?