서비스
교육 철학

Support Systems (지원 시스템)

Abstract

📌
"지원 시스템"은 게임 기능이 아니라 게임 기능을 만드는 재료 네 가지입니다 — 이벤트, 작업 대기열, 오브젝트 풀, 상태 기계. 엔티티·UI·사운드 같은 눈에 보이는 모듈이 전부 이 넷을 조합해 만들어졌습니다. 이 페이지는 넷을 한 번에 훑는 지도이고, 각각의 상세는 하위 페이지에 있습니다.
넷 중 게임 코드가 직접 쓰는 것
시스템
게임 코드에서
ToyboxNightmare
상세
Event
매일 쓴다 — Subscribe / Fire
자체 이벤트 7종. HUD 가 게임 로직을 참조하지 않고 화면을 갱신한다
FSM
자주 쓴다 — 캐릭터·AI 의 상태
적 4상태, 플레이어 3상태, 선택 캐릭터 2상태. 게임 흐름(Procedure)도 FSM 이다
Object Pool
간접적으로 — 엔티티·UI 를 쓰면 따라온다
엔티티 그룹 5개가 각자 풀 하나씩
Task
직접 쓰지 않는다 — 다운로드·웹 요청의 내부 구조
사용하지 않음
넷이 맞물리는 한 장면 — 적 한 마리가 죽을 때
1.
체력이 0 이 되면 Enemy 가 EnemyDiedEventArgs 를 Fire 한다(Event). 인자는 레퍼런스 풀에서 꺼낸 것이다.
2.
EnemyChaseState(FSM)가 다음 갱신에서 owner.IsDying 을 보고 EnemyDyingState 로 전이한다.
3.
다음 프레임 맨 앞에서 이벤트가 배달되어 SurvivalGame 이 점수를 올리고, 다시 ScoreChangedEventArgs 를 Fire 한다. 그다음 프레임에 HUDForm 이 숫자를 바꾼다.
4.
사망 연출이 끝나면 SafeHide() → 엔티티 인스턴스가 Object Pool 로 돌아가고, FSM 은 파괴되어 레퍼런스 풀로 돌아간다.
5.
몇 초 뒤 스포너가 같은 주소로 ShowEntity 하면, 4번에서 돌아간 바로 그 인스턴스가 다시 나온다.
게임 코드는 1번의 Fire 한 줄과 4번의 SafeHide() 한 줄만 썼고, 나머지는 프레임워크가 했습니다.
⚠️
본문을 읽을 때 주의할 점
•
본문의 클래스 이름(EventPool<T>, TaskPool<T>, ObjectPoolManager, FsmManager)은 코어 내부 타입입니다. 게임 코드의 창구는 각각 EventComponent, (없음), ObjectPoolComponent, FsmComponent 입니다.
•
"Event System → Entity, UI, Sound 가 사용"이라는 표는 조금 단순화한 것입니다. 코어의 Entity / UI / Sound 매니저는 평범한 C# event 로 결과를 알리고, Unity 쪽 컴포넌트가 그것을 받아 EventComponent 로 다시 발행합니다. 게임 코드가 ShowEntitySuccessEventArgs 를 구독할 수 있는 것은 그 중계 덕분입니다.
•
Task 사용처로 적힌 ResourceManager 는 원작 기준입니다. 이 에디션의 리소스 로딩은 Addressables 가 맡아 Task 를 쓰지 않습니다.

Support Systems (지원 시스템)

관련 소스 파일

•
GameFramework/Base/EventPool/EventPool.cs
•
GameFramework/Base/TaskPool/ITaskAgent.cs
•
GameFramework/Base/TaskPool/TaskBase.cs
•
GameFramework/Base/TaskPool/TaskInfo.cs
•
GameFramework/Base/TaskPool/TaskPool.cs
•
GameFramework/Download/DownloadManager.DownloadTask.cs
•
GameFramework/Entity/EntityManager.EntityGroup.cs
•
GameFramework/Entity/EntityManager.EntityInfo.cs
•
GameFramework/Entity/IEntityGroup.cs
•
GameFramework/Entity/IEntityManager.cs
•
GameFramework/Fsm/Fsm.cs
•
GameFramework/Fsm/FsmManager.cs
•
GameFramework/ObjectPool/IObjectPool.cs
•
GameFramework/ObjectPool/IObjectPoolManager.cs
•
GameFramework/ObjectPool/ObjectPoolBase.cs
•
GameFramework/ObjectPool/ObjectPoolManager.cs
•
GameFramework/Resource/ResourceManager.ResourceLoader.LoadResourceTaskBase.cs
•
GameFramework/UI/IUIGroup.cs
•
GameFramework/UI/IUIManager.cs
•
GameFramework/UI/UIManager.UIGroup.cs
•
GameFramework/WebRequest/WebRequestManager.WebRequestTask.cs

개요

Game Framework의 지원 시스템(Support Systems) 은 다른 모듈들이 의존할 수 있는 기본 인프라를 제공합니다.
이 시스템들은 공통적인 문제를 다루며, 효율성과 유지보수성, 아키텍처적 일관성을 강화하는 핵심 패턴들을 구현합니다.
포함된 시스템:
•
이벤트 시스템 (Event System)
•
작업 시스템 (Task System)
•
객체 풀 시스템 (Object Pool System)
•
유한 상태 기계(FSM) 시스템
이 페이지에서는 고수준의 게임플레이 및 애플리케이션 기능을 가능하게 하는 핵심 지원 시스템의 설계와 사용법을 설명합니다.
UI, Entity, Resource 관리 같은 특정 게임 시스템은 각 페이지에서 다룹니다.

지원 시스템 개요

Game Framework가 제공하는 지원 시스템은 다음과 같습니다:
•
Event System (EventPool): 타입 안전한 메시지 전달 (Observer 패턴 기반)
•
Task System (TaskPool): 우선순위 기반 스케줄링을 통한 비동기 작업 관리
•
Object Pool System: 객체 재사용을 통한 메모리 할당 감소
•
Finite State Machine System: 상태 기반 동작 모델링 및 전환

Event System

Event System은 Observer 패턴을 타입 안전하게 구현하여 컴포넌트 간의 느슨한 결합을 지원합니다.
직접 참조 없이 메시지를 전달할 수 있습니다.

아키텍처

•
핵심 클래스: EventPool<T>
•
구독 관리 및 이벤트 디스패치 담당
특징:
•
타입 안전성 (이벤트 풀마다 특정 EventArgs 타입 사용)
•
다양한 이벤트 모드 지원 (중복 핸들러 허용 여부 등)
•
비동기 이벤트: Fire() → 큐에 등록 후 다음 Update에서 처리
•
즉시 이벤트: FireNow() → 즉시 핸들러 호출
•
스레드 안전성: 비동기 이벤트는 락으로 보장
•
이벤트 처리 후, 인자는 Reference Pool로 반환

사용 예시

•
Entity, UI, Sound Manager → 상태 변화 알림
•
Resource Manager → 로딩 진행 보고
•
Network System → 수신 데이터 전달

Task System

Task System은 비동기 작업을 우선순위 기반으로 관리합니다.
리소스 로딩, 네트워크 요청, 파일 다운로드 등 시간이 소요되는 작업에 사용됩니다.

아키텍처

•
핵심 클래스: TaskPool<T>
•
에이전트(Task Agent) 풀을 관리하며 작업을 처리
•
작업 우선순위 기반 스케줄링
구성 요소:
•
TaskBase: 모든 작업의 추상 클래스 (우선순위, 사용자 데이터 포함)
•
TaskPool: 에이전트 및 대기 작업 관리, 스케줄링 담당
•
ITaskAgent: 작업을 실제로 처리하는 에이전트 인터페이스
•
TaskInfo: 작업 정보를 담는 구조체

사용 예시

•
ResourceManager → 리소스 로딩
•
DownloadManager → 파일 다운로드
•
WebRequestManager → 웹 요청 처리

Object Pool System

Object Pool System은 객체 재사용을 통해 메모리 할당과 GC를 줄여 성능을 최적화합니다.

아키텍처

Usage patterns:
1.
Create Pool: System creates a pool with specific settings
2.
Register Objects: Objects are registered with the pool
3.
Spawn Objects: Objects are acquired from the pool when needed
4.
Unspawn Objects: Objects are returned to the pool when no longer needed
5.
Auto-release: Unused objects are automatically released to free memory
•
핵심 클래스: ObjectPoolManager
•
다양한 객체 풀을 관리
•
풀마다 용량(capacity), 자동 해제 주기, 만료 시간 설정 가능
구성 요소:
•
ObjectPoolManager: 풀들의 중앙 관리자
•
ObjectPoolBase: 모든 객체 풀의 기반 클래스
•
IObjectPool: 타입별 객체 풀 인터페이스
•
ObjectBase: 풀링 가능한 객체의 기반 클래스
특징:
•
Single/Multi Spawn: 객체 중복 반환 가능 여부 설정
•
Auto-release: 주기적으로 검사해, 쓰이지 않는 객체를 자동으로 해제(파괴)
•
Priority 기반 해제: 용량 초과 시 낮은 우선순위 객체부터 해제
•
Expiration: 만료 시간 초과 객체 자동 해제

사용 예시

•
Entity Manager: 엔티티 재사용 관리
•
UI Manager: UI 객체 관리
•
Resource Loader: 리소스 관리

Finite State Machine (FSM) System

FSM 시스템은 상태 기반 행동을 모델링하여 복잡한 객체의 라이프사이클과 동작을 관리합니다.
Usage pattern:
1.
Create FSM: Define states and create an FSM with an owner
2.
Start FSM: Begin the state machine with an initial state
3.
Update: The current state is updated each frame
4.
Transition: States can trigger transitions to other states
5.
Destroy: When no longer needed, the FSM can be destroyed

아키텍처

•
핵심 클래스: FsmManager
•
모든 FSM을 관리
•
FSM은 소유자(Owner), 상태(States), 상태 전환(Transitions)으로 구성
구성 요소:
•
FsmManager: FSM 중앙 관리자
•
FsmBase: 모든 FSM의 추상 클래스
•
Fsm<T>: 제네릭 FSM 구현
•
FsmState: FSM의 상태 기본 클래스
특징:
•
타입 안전성: FSM과 상태는 Owner 타입과 강하게 연결됨
•
데이터 공유: FSM 내에서 모든 상태가 접근 가능한 데이터 저장 가능
•
라이프사이클 메서드: Entry, Exit, Update 지원
•
Named FSM: 동일한 Owner 타입에 여러 FSM 생성 가능

사용 예시

•
캐릭터 상태 관리 (Idle, Walk, Attack 등)
•
게임 상태 관리 (Menu, Gameplay, Pause 등)
•
UI 상태 관리 (Show, Hide, Transition 등)
•
시스템 상태 관리 (Initializing, Running, Shutdown 등)

프레임워크와의 통합

지원 시스템은 GameFramework의 모듈 관리 시스템과 통합됩니다.
•
모든 모듈은 GameFrameworkModule 상속
•
GameFrameworkEntry에 등록되어 생명주기 관리
생명주기:
1.
Initialization: 초기화 및 등록
2.
Update: 우선순위 순으로 매 프레임 업데이트
3.
Shutdown: 종료 시 역순으로 정리
•
Object Pool, FSM, Event 는 모듈로 통합 (ObjectPoolManager, FsmManager, EventManager)
•
EventPool<T> 와 TaskPool<T> 는 모듈이 아니라 모듈 내부에서 쓰는 부품이다 (둘 다 internal). 예: EventManager 가 EventPool<GameEventArgs> 하나를, DownloadManager 가 TaskPool<DownloadTask> 하나를 든다

요약

지원 시스템은 Game Framework의 상위 레벨 시스템을 가능하게 하는 핵심 인프라입니다.
시스템
주요 목적
핵심 클래스
사용 모듈
Event System
컴포넌트 간 메시지 전달
EventPool
Entity, UI, Sound
Task System
비동기 작업 관리
TaskPool, TaskBase
Resource, Download, WebRequest
Object Pool
객체 재사용
ObjectPoolManager, IObjectPool
Entity, UI, Resource
FSM System
상태 기반 동작 모델링
FsmManager, Fsm
게임 상태, 엔티티 동작
장점:
•
이벤트 & FSM을 통한 느슨한 결합
•
풀링 & 효율적 작업 관리로 성능 최적화
•
관심사 분리를 통한 구조적 설계
•
인터페이스와 추상 기반 클래스 덕분에 확장성 높음
→ 이 지원 시스템들은 Game Framework의 모든 다른 시스템의 기초를 형성합니다.