Company
교육 철학

Unity Gameframework 개요

게임 프레임워크 개요

관련 소스 파일
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는 기능이 각기 다른 특정 영역을 담당하는 별도의 컴포넌트로 나누어진 모듈식 아키텍처를 따릅니다. 그 중심에는 모든 프레임워크 컴포넌트의 초기화 및 생명주기를 관리하는 GameEntryBaseComponent 클래스가 있습니다.

핵심 아키텍처

프레임워크는 일관된 패턴을 따릅니다:
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 게임 개발을 위한 포괄적인 아키텍처와 도구 세트를 제공합니다.
개발자는 설계 패턴을 따르고 내장 모듈을 활용함으로써 일반적인 게임 시스템을 재구현하는 대신 게임 고유의 기능에 집중할 수 있습니다.
프레임워크의 모듈식 설계는 필요할 때 손쉽게 확장하거나 커스터마이징할 수 있게 하면서도 전체적으로 일관된 아키텍처를 유지합니다.
개별 시스템에 대한 자세한 정보는 이 문서 전반에 걸쳐 연결된 전용 위키 페이지를 참조하십시오.