본 프로젝트는 Unity 게임 개발에 특화된 오픈소스 프레임워크인 EllanJiang의 GameFramework를 토대로 개발되었습니다. GameFramework는 높은 재사용성과 유지보수성을 목표로 설계되었으며, 리소스 관리, 이벤트 시스템, UI 관리, 사운드, 네트워킹 등 다양한 기능 모듈을 제공합니다. 본 프로젝트에서는 이를 기반으로 맞춤형 기능을 추가하고 기존 시스템을 개선하여, 안정성과 확장성을 모두 갖춘 게임 아키텍처를 구현하였습니다.
개요 (Overview)
GameFramework는 게임 애플리케이션을 만들 때 공통적으로 필요한 기능을 모듈화해서 제공하는 종합 프레임워크입니다. 핵심 인프라를 매번 새로 만드는 대신, 재사용 가능한 컴포넌트와 시스템을 제공하여 개발자는 게임 고유의 로직에 집중할 수 있게 해줍니다.
관련 소스 파일 (Relevant source files)
•
GameFramework/Base/DataStruct/TypeNamePair.cs
•
GameFramework/Base/GameFrameworkEntry.cs
•
GameFramework/Base/GameFrameworkLinkedList.cs
•
GameFramework/Base/GameFrameworkLinkedListRange.cs
•
GameFramework/Base/GameFrameworkMultiDictionary.cs
•
GameFramework/Base/Version/Version.IVersionHelper.cs
•
GameFramework/Base/Version/Version.cs
목적과 범위 (Purpose and Scope)
이 문서는 GameFramework의 아키텍처, 핵심 컴포넌트, 그리고 컴포넌트 간 상호작용을 상위 수준에서 소개합니다. 각 시스템의 세부 내용으로 들어가기 전에 읽는 입문용 안내서입니다.
각 시스템의 자세한 내용은 해당 문서를 참고하세요:
•
코어 프레임워크 컴포넌트: Core Framework
•
리소스 관리 시스템: Resource Management
•
엔터티, UI, 사운드 시스템: Entity Framework
•
데이터 관리 시스템: Data Systems
•
네트워크 및 IO 시스템: Network and IO
출처(Sources):
GameFramework/Base/GameFrameworkEntry.cs 11–17
GameFramework/Base/Version/Version.cs 8–14
프레임워크 아키텍처 (Framework Architecture)
GameFramework는 중앙 집중식 모듈 관리 시스템을 중심으로 계층적·조직적으로 설계되었습니다. 각 주요 기능 영역은 공통 기반 클래스를 상속하는 모듈로 구현됩니다.
상위 수준 아키텍처 (High-Level Architecture)
(상위 구조 도식)
출처(Sources): GameFramework/Base/GameFrameworkEntry.cs 16–18
아키텍처는 대략 다음과 같은 레이어로 구성됩니다:
•
코어 프레임워크: 기반과 중앙 관리 제공
•
주요 시스템: 게임 기능을 담당하는 개별 특화 모듈
•
지원 시스템: 여러 주요 시스템이 공통으로 사용하는 유틸리티
모듈 관리 시스템 (Module Management System)
핵심은 모든 모듈의 진입점이자 중앙 관리자 역할을 하는 GameFrameworkEntry 클래스입니다. 이 클래스는 우선순위가 있는 모듈 목록을 유지하고, 모듈의 생명주기를 오케스트레이션합니다.
모듈 생명주기 (Module Lifecycle)
출처(Sources):
GameFramework/Base/GameFrameworkEntry.cs 25–46
GameFramework/Base/GameFrameworkEntry.cs 52–131
모듈 시스템의 주요 특징 (Key Features)
•
지연 초기화: GetModule<T>() 요청 시에만 모듈 생성
•
우선순위 정렬: 결정적 업데이트 순서를 위한 우선순위 기반 정렬
•
타입 안전성: 제네릭 메서드로 강타입 모듈 조회
•
자동 생성: 요청된 모듈이 없으면 자동으로 생성
출처(Sources): GameFramework/Base/GameFrameworkEntry.cs 52–131
메모리 관리 (Memory Management)
GameFramework는 성능 최적화와 GC 압박 감소를 위해 커스텀 자료구조와 메모리 관리 기법을 제공합니다.
레퍼런스 풀링 (Reference Pooling)
객체를 매번 생성·GC하지 않고 재사용할 수 있게 하는 시스템입니다.
출처(Sources): GameFramework/Base/GameFrameworkEntry.cs 44
커스텀 자료구조 (Custom Data Structures)
게임에 특화된 다음 자료구조를 제공합니다:
•
GameFrameworkLinkedList: 노드를 캐시/재사용하는 링크드 리스트
•
GameFrameworkLinkedListRange: 링크드 리스트의 구간 표현
•
GameFrameworkMultiDictionary: 하나의 키에 여러 값을 저장하는 딕셔너리
출처(Sources):
GameFramework/Base/GameFrameworkLinkedList.cs 19–452
GameFramework/Base/GameFrameworkLinkedListRange.cs 19–217
GameFramework/Base/GameFrameworkMultiDictionary.cs 19–283
버전 관리 (Version Management)
Version 클래스는 다음 정보를 제공합니다:
•
프레임워크 버전: GameFramework 자체 버전
•
게임 버전: IVersionHelper를 통해 제공되는 게임 버전
•
내부 게임 버전: 숫자 기반 내부 버전 코드(역시 IVersionHelper 경유)
출처(Sources):
GameFramework/Base/Version/Version.cs 13–70
GameFramework/Base/Version/Version.IVersionHelper.cs 15–33
리소스 관리 (Resource Management)
리소스 관리 시스템은 프레임워크에서 가장 중요한 컴포넌트 중 하나로, 의존성 처리와 비동기 작업을 포함한 에셋의 로드/언로드/업데이트를 담당합니다.
출처(Sources): 제공된 아키텍처 도식에 기반한 정보
엔터티와 UI 프레임워크 (Entity and UI Framework)
엔터티 및 UI의 생명주기 관리를 담당하는 포괄적인 시스템을 제공합니다.
출처(Sources): 제공된 아키텍처 도식에 기반한 정보
결론 (Conclusion)
GameFramework는 다음을 중시하는 견고한 게임 개발 기반을 제공합니다:
•
모듈성: 독립적으로 사용할 수 있는 자기완결적 시스템
•
성능: 최적화된 자료구조와 메모리 관리
•
확장성: 플랫폼 별 구현을 위한 헬퍼 인터페이스
•
조직화: 관심사 분리와 명확한 책임 구분
이들 컴포넌트가 어떻게 상호작용하는지 이해하면, 프레임워크를 활용해 견고하고 유지보수 쉬운 게임을 효과적으로 개발할 수 있습니다.