Abstract
GameEntry 는 프레임워크의 현관문입니다. 모든 모듈은 GameEntry.GetComponent<T>() 한 줄로 꺼냅니다. 싱글턴을 모듈마다 만들 필요도, 인스펙터로 참조를 연결할 필요도 없습니다.
가장 자주 쓰는 형태
EntityComponent entity = GameEntry.GetComponent<EntityComponent>();
EventComponent events = GameEntry.GetComponent<EventComponent>();
UIComponent ui = GameEntry.GetComponent<UIComponent>();
C#
복사
ToyboxNightmare 에서 지키는 세 가지 습관
① 메서드 안에서 받아 쓴다. GetComponent 는 등록 목록을 선형 탐색하므로 반복문 안에서 매번 부르지 않고 지역 변수에 한 번 받습니다.
// EnemySpawner.OnUpdate — 스폰 지점마다 다시 찾지 않는다
EntityComponent entityComponent = GameEntry.GetComponent<EntityComponent>();
for (int i = 0; i < EnemyTable.SpawnPoints.Length; i++) { ... }
C#
복사
② 정리 경로에서는 null 을 허용한다. 앱이 종료될 때는 컴포넌트가 먼저 파괴돼 있을 수 있습니다. OnHide, OnClose, Shutdown 에서는 null 이면 조용히 빠져나갑니다.
EventComponent events = GameEntry.GetComponent<EventComponent>();
if (events == null) return; // 종료 중이면 구독도 함께 사라진 뒤다
events.Unsubscribe(...);
C#
복사
③ static 필드에 영구 캐싱하지 않는다. 재시작이나 종료 뒤에 파괴된 컴포넌트를 물게 됩니다.
확장하려면: 직접 만든 컴포넌트도 GameFrameworkComponent 를 상속하면 같은 방식으로 꺼낼 수 있습니다. 방법은
Core Architecture 의 Abstract 를 보세요.
원작 예제(StarForce)에는 GameEntry.Entity, GameEntry.UI 처럼 프로퍼티로 꺼내는 코드가 나옵니다. 그것은 게임 쪽에서 따로 만든 편의 클래스이고, 프레임워크의 GameEntry 에는 GetComponent 와 Shutdown 만 있습니다.
GameEntry와 컴포넌트 관리
관련 소스 파일
•
GameFramework.prefab
•
GameFramework.prefab.meta
•
Scripts/Runtime/Base/BaseComponent.cs
•
Scripts/Runtime/Base/GameEntry.cs
•
Scripts/Runtime/Entity/Entity.cs
•
Scripts/Runtime/Entity/EntityLogic.cs
•
Scripts/Runtime/UI/UIForm.cs
•
Scripts/Runtime/UI/UIFormLogic.cs
•
Scripts/Runtime/Utility/DefaultLogHelper.cs
•
Scripts/Runtime/Utility/Log.cs
목적과 범위
이 문서는 Unity Game Framework의 중앙 관리 시스템을 설명하며, GameEntry 정적 클래스와 그것이 컴포넌트를 어떻게 관리하는지에 초점을 맞춥니다. GameEntry는 모든 프레임워크 컴포넌트에 대한 중앙 접근 지점으로 작동하며, 게임 코드 전체에서 기능을 일관되게 접근할 수 있는 방법을 제공합니다.
각 컴포넌트가 사용하는 특정 헬퍼 패턴에 대한 세부 사항은 Helper Pattern을 참조하세요.
GameEntry 개요
GameEntry는 프레임워크 내 모든 GameFrameworkComponent의 레지스트리이자 접근 지점 역할을 하는 정적 클래스입니다. Unity의 GetComponent 또는 FindObjectOfType 메서드를 통해 컴포넌트에 접근하는 대신, GameEntry는 싱글톤과 유사한 레지스트리를 제공하여 코드 어디서나 컴포넌트에 접근할 수 있게 합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs
컴포넌트 등록 시스템
GameEntry는 모든 등록된 컴포넌트의 연결 리스트를 유지합니다. GameFrameworkComponent가 초기화될 때, 내부 RegisterComponent 메서드를 사용하여 스스로를 GameEntry에 등록합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs 122-145
프레임워크 컴포넌트 접근
GameEntry는 컴포넌트를 검색하기 위해 세 가지 메서드를 제공합니다:
// 제네릭 타입 매개변수로 컴포넌트 가져오기
T GetComponent<T>() where T : GameFrameworkComponent
// Type 객체로 컴포넌트 가져오기
GameFrameworkComponent GetComponent(Type type)
// 타입 이름으로 컴포넌트 가져오기
GameFrameworkComponent GetComponent(string typeName)
C#
복사
구현은 등록된 컴포넌트를 순회하며 요청된 타입과 각 컴포넌트의 타입을 비교합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs 33-79
BaseComponent: 프레임워크 초기화
BaseComponent는 코어 프레임워크를 초기화하는 특수한 GameFrameworkComponent입니다. 모든 다른 컴포넌트들이 의존하는 기반 역할을 합니다.
주요 책임:
•
헬퍼 클래스 초기화(TextHelper, VersionHelper, LogHelper 등)
•
프레임워크 설정 구성(프레임 레이트, 백그라운드 실행 등)
•
GameFrameworkEntry(코어 비-Unity 프레임워크) 초기화
•
매 프레임마다 프레임워크 업데이트
출처:
Scripts/Runtime/Base/BaseComponent.cs 185-245
컴포넌트 계층 구조
프레임워크는 포괄적인 컴포넌트 세트를 제공하며, 모두 GameEntry를 통해 접근할 수 있습니다. GameFramework.prefab 파일은 이 모든 컴포넌트를 미리 구성된 상태로 포함합니다.
출처:
GameFramework.prefab 12-611
Scripts/Runtime/Base/GameEntry.cs 19-146
프레임워크 컴포넌트 표
컴포넌트 | 목적 |
BaseComponent | 프레임워크 초기화 및 설정 |
ResourceComponent | 리소스 로딩 및 관리 |
ConfigComponent | 설정 데이터 관리 |
DataTableComponent | 게임 데이터 테이블 관리 |
DebuggerComponent | 런타임 디버깅 도구 |
DownloadComponent | 파일 다운로드 작업 |
EntityComponent | 게임 엔티티 관리 |
EventComponent | 이벤트 디스패치 시스템 |
FileSystemComponent | 파일 시스템 작업 |
FsmComponent | 유한 상태 기계 시스템 |
LocalizationComponent | 로컬라이제이션 시스템 |
NetworkComponent | 네트워크 통신 |
ObjectPoolComponent | 오브젝트 풀링 시스템 |
ProcedureComponent | 게임 프로시저(상태) 관리 |
ReferencePoolComponent | 레퍼런스 풀링 시스템 |
SceneComponent | 씬 로딩 및 관리 |
SettingComponent | 게임 설정 관리 |
SoundComponent | 오디오 시스템 |
UIComponent | UI 관리 시스템 |
WebRequestComponent | 웹 요청 작업 |
출처:
GameFramework.prefab 12-611
프레임워크 종료 프로세스
GameEntry는 프레임워크를 올바르게 종료하기 위해 Shutdown 메서드를 제공합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs 85-116
UI 및 엔티티 시스템에서 GameEntry 사용 방법
UI와 엔티티 시스템은 모두 GameEntry를 통해 컴포넌트에 접근하는 유사한 패턴을 따릅니다.
•
UI 시스템 예시
출처: Scripts/Runtime/UI/UIFormLogic.cs, Scripts/Runtime/UI/UIForm.cs
•
엔티티 시스템 예시
출처: Scripts/Runtime/Entity/EntityLogic.cs, Scripts/Runtime/Entity/Entity.cs
모범 사례
•
Unity의 컴포넌트 접근 메서드 대신 항상 GameEntry를 통해 컴포넌트에 접근할 것
•
컴포넌트를 GameEntry에 수동으로 등록하지 말 것 — 컴포넌트는 초기화 시 스스로 등록해야 함
•
직접 구현하기보다 해당 작업에 적합한 프레임워크 컴포넌트를 사용할 것
•
컴포넌트 의존 순서를 기억할 것: BaseComponent가 먼저 초기화되고, 그 후 다른 컴포넌트들이 초기화됨
출처:
Scripts/Runtime/Base/GameEntry.cs
Scripts/Runtime/Base/BaseComponent.cs
Low Memory Handling
BaseComponent는 모바일 기기에서 저메모리 상황을 위한 특수한 핸들러를 포함합니다.
출처:
Scripts/Runtime/Base/BaseComponent.cs 408-423
결론
GameEntry와 컴포넌트 관리 시스템은 Unity Game Framework의 중추를 형성합니다. 컴포넌트 접근과 관리를 중앙화함으로써, 게임 코드 어디서든 프레임워크 기능을 간소화된 방식으로 활용할 수 있으며 동시에 관심사의 올바른 분리를 유지할 수 있습니다.












