게임 프레임워크 개요
관련 소스 파일
•
README.md
•
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
•
package.json
•
package.json.meta
목적
Game Framework는 Unity 엔진을 기반으로 구축된 포괄적인 게임 개발 프레임워크입니다.
이 프레임워크는 모듈식이고 확장 가능한 아키텍처를 제공하여 일반적인 게임 개발 기능을 캡슐화하고, 개발 패턴을 표준화하며, 개발 속도를 가속화하고, 제품 품질을 보장하는 데 도움을 줍니다.
이 문서는 개발자가 프레임워크의 아키텍처, 핵심 개념 및 주요 기능을 이해하고 효과적으로 활용할 수 있도록 프레임워크를 소개합니다.
개별 시스템의 구체적인 구현 세부사항은 이 문서 전반에 걸쳐 연결된 전용 위키 페이지를 참조하시기 바랍니다.
소개
Game Framework는 잘 구조화된 모듈 세트를 제공하여 게임 개발의 일반적인 문제를 해결하도록 설계되었습니다. 이 모듈들은 게임 아키텍처의 다양한 측면을 다루며, 구성 요소 기반 설계, 관심사의 분리, 적절한 추상화 계층을 도입하여 유지 관리 가능하고 확장 가능한 코드를 보장합니다.
이 프레임워크는 리소스 관리부터 UI 시스템, 엔티티 처리, 디버깅 도구에 이르기까지 다양한 측면을 다루는 19개의 내장 모듈로 구성되어 있습니다. 모든 모듈은 일관된 설계 패턴을 따르기 때문에 프레임워크는 응집력 있고 학습하기 쉽습니다.
아키텍처 개요
Game Framework는 기능이 각기 다른 특정 영역을 담당하는 별도의 컴포넌트로 나누어진 모듈식 아키텍처를 따릅니다. 그 중심에는 모든 프레임워크 컴포넌트의 초기화 및 생명주기를 관리하는 GameEntry와 BaseComponent 클래스가 있습니다.
핵심 아키텍처
프레임워크는 일관된 패턴을 따릅니다:
•
GameEntry는 모든 컴포넌트에 대한 중앙 접근 지점 역할을 합니다.
•
컴포넌트들은 GameEntry에 등록되며 GetComponent<T>()를 통해 검색할 수 있습니다.
•
각 컴포넌트는 실제 기능을 구현하는 해당 매니저에 접근할 수 있습니다.
•
매니저는 동작을 커스터마이징할 수 있는 헬퍼 클래스를 사용합니다.
컴포넌트 관계
이 다이어그램은 Game Framework가 Unity 특정 코드와 프레임워크 내부 구현 간의 다리를 어떻게 놓는지 보여주며, 이를 통해 관심사의 명확한 분리를 가능하게 합니다.
핵심 시스템
GameEntry
GameEntry는 모든 Game Framework 컴포넌트의 중앙 접근 지점 역할을 하는 정적 클래스입니다.
이 클래스는 등록된 컴포넌트의 레지스트리를 유지 관리하며, 타입별로 컴포넌트를 검색할 수 있는 메서드를 제공합니다.
주요 특징
•
모든 Game Framework 컴포넌트에 대한 정적 접근 지점
•
연결 리스트를 통한 컴포넌트 레지스트리 관리
•
제네릭 GetComponent<T>() 메서드를 통한 컴포넌트 검색
•
시스템 종료 기능 제공
사용 예시
// 리소스 컴포넌트 가져오기
ResourceComponent resourceComponent = GameEntry.GetComponent<ResourceComponent>();
// UI 컴포넌트 가져오기
UIComponent uiComponent = GameEntry.GetComponent<UIComponent>();
C#
복사
컴포넌트 패턴
Game Framework는 모든 시스템에서 일관된 컴포넌트 패턴을 사용합니다:
•
Unity 컴포넌트 계층: XxxComponent 클래스는 MonoBehaviour를 상속하며 GameObject에 추가되어야 합니다.
•
매니저 계층: 각 컴포넌트는 핵심 기능을 구현하는 IXxxManager 인터페이스에 접근합니다.
•
헬퍼 계층: 매니저는 커스터마이징 지점을 제공하는 XxxHelperBase 클래스를 사용합니다.
장점
•
Unity 특정 코드와 프레임워크 핵심 로직 간의 명확한 분리
•
헬퍼 구현을 통한 커스터마이징 포인트 제공
•
모든 시스템에서 일관된 아키텍처 유지
주요 시스템
리소스 시스템
비동기 로딩 아키텍처를 통해 모든 리소스 로딩 작업을 처리합니다.
포괄적인 메모리 관리, 다양한 리소스 모드, Unity의 에셋 로딩에 대한 추상화를 특징으로 합니다.
UI 시스템
UI Form의 전체 생명주기(열기, 닫기, 일시정지, 재개, 덮기, 드러내기)를 관리합니다.
모든 UI 구현은 UIFormLogic 기반 클래스를 통해 표준 패턴을 따릅니다.
엔티티 시스템
게임 엔티티를 관리하기 위한 구조화된 방법을 제공합니다.
엔티티는 EntityLogic 기반 클래스를 상속하며, 표준 생명주기 메서드(보이기, 숨기기, 붙이기, 떼기)를 정의합니다.
기타 주요 시스템
시스템 | 목적 |
Config | 전역 읽기 전용 게임 설정 저장 |
Data Table | 테이블에서 구조화된 게임 데이터 관리 |
Localization | 다국어 텍스트 및 리소스 지원 제공 |
Event | 게임 로직 분리를 위한 이벤트 시스템 구현 |
Object Pool | 객체 재사용을 통해 성능 향상 |
FSM | 게임 로직을 위한 유한 상태 기계 구현 |
Network | TCP 소켓 연결을 통한 네트워크 통신 제공 |
Scene | 씬 로딩 관리 (부분 씬 로딩 포함) |
Setting | 사용자 환경설정 및 게임 설정 저장 |
Sound | 2D/3D 사운드 지원 오디오 재생 관리 |
Debugger | 런타임 디버깅 도구 제공 |
모듈 상호작용 다이어그램
이 다이어그램은 다양한 모듈들이 서로 어떻게 상호작용하는지 보여줍니다.
리소스 시스템은 중심에 있으며, UI, 엔티티, 씬, 사운드 컴포넌트에 리소스 로딩 기능을 제공합니다.
데이터 테이블과 로컬라이제이션 같은 다른 시스템도 데이터를 로드하기 위해 리소스 시스템에 의존합니다.
시작하기
Game Framework를 사용하기 시작하려면 보통:
1.
BaseComponent가 포함된 GameObject를 씬에 설정합니다.
2.
같은 GameObject에 필요한 다른 컴포넌트(Resource, UI, Entity 등)를 추가합니다.
3.
GameEntry 정적 클래스를 통해 컴포넌트에 접근합니다.
예시 코드
// UI 컴포넌트 가져오기
UIComponent uiComponent = GameEntry.GetComponent<UIComponent>();
// UI Form 열기
uiComponent.OpenUIForm("UIFormAssetName", "UIGroupName");
// 엔티티 컴포넌트 가져오기
EntityComponent entityComponent = GameEntry.GetComponent<EntityComponent>();
// 엔티티 보여주기
entityComponent.ShowEntity<EntityLogic>("EntityAssetName", "EntityGroupName");
C#
복사
결론
Game Framework는 Unity 게임 개발을 위한 포괄적인 아키텍처와 도구 세트를 제공합니다.
개발자는 설계 패턴을 따르고 내장 모듈을 활용함으로써 일반적인 게임 시스템을 재구현하는 대신 게임 고유의 기능에 집중할 수 있습니다.
프레임워크의 모듈식 설계는 필요할 때 손쉽게 확장하거나 커스터마이징할 수 있게 하면서도 전체적으로 일관된 아키텍처를 유지합니다.
개별 시스템에 대한 자세한 정보는 이 문서 전반에 걸쳐 연결된 전용 위키 페이지를 참조하십시오.