Logger
01ILogger빌드 티어별 로그 레벨과 카테고리 필터를 갖춘 분류형 로깅. 스레드 세이프.
Unity 6.3 LTS 기반 PC 싱글플레이어 프로젝트를 위한 헤드리스 C# 기반 프레임워크입니다. 헤드리스란 씬이 아니라 코드라는 뜻입니다 — 임포트해도 Hierarchy는 바뀌지 않습니다. 세이브/로드, 입력, 씬 플로우, 오디오, UI 패널, 트윈, 상태 머신 등 서비스 23개가 자동 Bootstrap.Run() 하나로 전부 시작됩니다. 설정할 DI 컨테이너도, 씬에 배치할 싱글턴도, 게임 스크립트에 넣을 초기화 코드도 없습니다.
여기서 시작
CGS는 씬이 아니라 코드입니다. 임포트해도 씬 Hierarchy에는 아무것도 나타나지 않습니다 — 프레임워크는 보이지 않는 곳에서 동작합니다. 눈에 보이는 것은 Welcome 창과 데모 씬입니다. 가장 빠른 둘러보기는 이렇습니다:
bootstrap complete (v2.1.0, 23 services) 한 줄이 보이면 모든 서비스가 정상적으로 시작된 것입니다.오프라인으로 읽고 싶다면 — 목차와 주석 달린 스크린샷을 갖춘 페이지형 PDF 매뉴얼이 패키지 안 Documentation/CGS-Manual.pdf에 함께 들어 있습니다.
개요
엔진
Unity 6.3 LTS (6000.3.11f1) · .NET Standard 2.1
서비스
23개 — 첫 스크립트가 실행되기 전에 자동 부트스트랩 하나로 전부 시작됩니다
런타임 어셈블리
7개 — Core(패키지 참조 0개인 서비스 18종) + Input / UI / Localization / Assets / AddressableScene / Bootstrap. 안 쓰는 Unity 패키지(Input System / uGUI / Addressables)를 제거하면 의존 어셈블리가 스스로 빠지고, 빌드가 깨지는 대신 Bootstrap이 안전하게 폴백합니다
서드파티 의존성
0개 — Unity 엔진과 퍼스트파티 Addressables / Input System / uGUI(2.0.0부터는 각각 선택 사항)만 사용
스크립팅 백엔드
Mono와 IL2CPP 모두 지원. 프레임워크는 자체 보존 규칙([Preserve] + 모듈별 link.xml)을 함께 배포합니다. CI는 푸시마다 IL2CPP 스탠드얼론 플레이어를 빌드합니다
렌더 파이프라인
URP / HDRP / Built-in / 커스텀 파이프라인 어디서나 동작 — 프레임워크에 렌더링 코드가 없습니다
테스트
자동화된 테스트 2,600개 이상이 패키지 안에 숨겨진 채로 배포됩니다. Welcome 창에서 클릭 한 번으로 임포트할 수 있습니다
데모 씬
MotionLab.unity — 열고 Play만 누르면 됩니다. 트윈 이징 갤러리, 트윈 시퀀스, 스케줄러 타이머, 그리고 게임플레이는 얼리면서 UI 시계는 계속 돌게 하는 Time Scale 슬라이더
샘플
Welcome 창에서 임포트하는 6개 — 실행 가능한 씬 3개(UI Panel Stack · Save/Load + Seeded Random · Command Console)와 스크립트 템플릿 3개(Scene Flow · Localization · RPG Starter)
매뉴얼 · 문서
목차와 주석 달린 스크린샷을 갖춘 페이지형 PDF 매뉴얼(Documentation/CGS-Manual.pdf)과 서비스별 쉬운 말 레퍼런스(Documentation/Modules/)
에디터 도구
Welcome 창(패키지 버전마다 한 번 자동으로 열림, Tools > Common Game System > Welcome에서 다시 열기) + 런타임 Service Debugger
라이선스
Proprietary — Unity Asset Store EULA
플랫폼
PC (Windows / macOS / Linux), 싱글플레이어
퀵 스타트
프레임워크는 스스로 부팅하므로 직접 호출할 초기화 코드가 없습니다. 아래 스크립트는 붙여넣은 그대로 컴파일됩니다 — 첫 씬의 아무 GameObject에나 붙여 보세요.
using CommonGameSystem.Core;
using UnityEngine;
[DefaultExecutionOrder(100)] // see "Consumer conventions" below
public sealed class MyGame : MonoBehaviour
{
[SerializeField] private AudioClip mainTheme; // assign any music clip in the Inspector
private IAudioService _audio;
private IScheduler _scheduler;
private void Start()
{
// Bootstrap already registered all 23 services before Start() ran.
_audio = ServiceLocator.Resolve<IAudioService>();
_scheduler = ServiceLocator.Resolve<IScheduler>();
_audio.PlayMusic(mainTheme, fadeInSeconds: 2f);
_scheduler.After(3f, () => Debug.Log("Three seconds of game time later."));
}
}이게 전부입니다 — 서비스 23개는 여러분의 Start()가 실행되기 전에 이미 모두 등록돼 있습니다.
좋은 습관
레퍼런스
ILogger빌드 티어별 로그 레벨과 카테고리 필터를 갖춘 분류형 로깅. 스레드 세이프.
IObjectPoolServiceIPoolable 라이프사이클 기반 프리팹 풀링 — 카테고리별 풀, 프리웜, 자동 반환.
ITimeService클록별 시간 · 일시정지 · 슬로모션 — Gameplay / UI / Background 클록이 서로 독립적으로 흐릅니다.
IEventBus타입 세이프 publish/subscribe. 전역 게임 메시징을 느슨하게 결합합니다.
ISaveServiceJSON 슬롯 세이브, 안전한 원자적 쓰기, 버전 마이그레이션 훅.
IConfiguration타입이 있는 설정 그룹(오디오 / 그래픽 / 입력) — 값을 바꾸는 즉시 저장됩니다.
IInputKeyMapSourceInput Actions 에셋을 소유하고, 플레이어의 키 리바인딩을 세션 간에 보존합니다.
IInputServiceInput System 래퍼 — 액션 맵 컨텍스트와 키 리바인딩.
IAudioServiceAudioMixer 위의 음악 / SFX / 보이스 채널 — 풀링된 소스, 페이드, 볼륨 바인딩.
IPanelStack패널 push/pop과 모달, 게임패드 / 키보드 포커스 처리까지.
ISceneService로딩 화면과 취소를 지원하는 비동기 씬 로드, 여기에 additive 로드/언로드까지.
ILocalizationService키 → 문자열 조회와 런타임 언어 전환 — 바인딩된 텍스트가 재시작 없이 즉시 갱신됩니다.
IAchievementService로컬 스탯과 업적, 임계값 자동 해금 — 세이브 서비스를 통해 저장됩니다.
IScheduler일시정지 · 슬로모를 인식하는 After / Every / NextFrame 타이머와 메인 스레드 디스패치.
ITweenService일시정지를 인식하는 값 트위닝 — 이징 커브 31종, 타입이 닫힌 To/From 오버로드.
IAssetProviderAddressables 기반 비동기 로딩 — 참조 카운트와 스코프 단위 자동 언로드.
IRandomService결정론적 시드 RNG — 이름 있는 분기 가능 스트림, 세이브와 맞아떨어지는 스냅샷/복원.
IStateMachineService게임이 정의한 컨텍스트 타입 위에서 도는 플랫 유한 상태 머신 팩토리 — 가드 조건 전이 지원.
IPushdownStackService재개 가능한 게임 상태 스코프의 스택 — 게임플레이 위에 얹는 대화, 메뉴 뒤로가기 스택.
ITweenSequenceService트윈 서비스 위에 얹는 순차 + 병렬 타임라인 — 플루언트 빌더로 구성합니다.
IAddressableSceneServiceAddressables 카탈로그에서 additive 씬 로드/언로드 — 키별 참조 카운트.
IDeferredBus지금 이벤트를 큐에 넣고 원하는 Flush() 시점에 발행 — 예를 들어 물리 콜백 바깥으로.
ICommandRegistry런타임 커맨드 레지스트리 — 등록 / 토큰화 / 실행, 히스토리, 자동완성. 콘솔 UI는 직접 만듭니다.
모든 서비스는 패키지 안에 쉬운 말로 쓴 레퍼런스 문서(Documentation/Modules/)와, 한 줄로 갈아 끼울 수 있는 Null(no-op) 구현을 함께 제공합니다.
동작 방식
릴리스
입문자를 위한 릴리스 — CGS를 처음 보는 사람이 몇 분 안에 생산적으로 쓸 수 있도록 문서와 패키징을 다시 만들었습니다. 모든 런타임 폴더와 레퍼런스 문서가 이제 쉬운 영어 이름을 씁니다(Bootstrap, SaveLoad, Tween, …) — 폴더와 파일 이름에서 옛 내부 번호 접두사가 사라졌습니다. 눈에 보이는 데모 씬이 Assets/CommonGameSystem.Core/Demo/MotionLab.unity에 들어갑니다 — 열고 Play만 누르면 되고, 설정이 필요 없습니다. 트윈 이징 갤러리, 트윈 시퀀스 쇼케이스, 스케줄러 타이머, 그리고 게임플레이는 얼리면서 UI 시계는 계속 돌게 하는 Time Scale 슬라이더를 보여 주며, 내장 uGUI 패키지만 있으면 됩니다. Welcome 창은 "60초 안에 데모 체험"을 중심으로 다시 만들었습니다: 패키지 버전마다 한 번 자동으로 열리고, Tools > Common Game System > Welcome과 Window > Common Game System > Welcome 양쪽에서 열 수 있으며, 샘플 원클릭 임포트, 퀵 링크(PDF 매뉴얼 / 문서 / 체인지로그 / 모듈 레퍼런스), 접힌 환경 점검을 제공합니다. 샘플은 이제 6개입니다 — UI Panel Stack, Save/Load + Seeded Random, Command Console은 실행 가능한 씬이고, Scene Flow, Localization, RPG Starter는 단계별 스크립트 템플릿입니다. (Motion Lab은 샘플에서 항상 보이는 데모로 승격되었습니다.) 목차와 주석 달린 스크린샷을 갖춘 페이지형 PDF 매뉴얼이 Documentation/CGS-Manual.pdf로 배포되고, AI 어시스턴트 파일은 Documentation/AI/로 옮겼습니다. 자동화된 테스트 2,600개 이상은 여전히 패키지 안에 들어 있지만 이제 숨겨진 채로 배포됩니다 — Welcome 창에서 클릭 한 번으로 임포트하기 전에는 구매자 프로젝트에 컴파일되지 않습니다. 서비스는 여전히 23개, 서드파티 의존성은 여전히 0개입니다.
어셈블리 일곱 개로 나눈 릴리스입니다. 하나였던 CommonGameSystem.Core 런타임 어셈블리가 일곱 개로 나뉘어 — Core(패키지 의존성 0개인 서비스 18종 + 순수 UI 계약), Input, UI, Localization, Assets, AddressableScene, Bootstrap — 실제로 쓰는 것만 골라 참조하면 됩니다. Breaking은 자체 asmdef를 쓰는 프로젝트에만, 그것도 references 목록에만 해당합니다. 소스 변경은 없고, 네임스페이스는 전부 CommonGameSystem.Core 그대로이며, Assembly-CSharp 프로젝트는 영향을 받지 않습니다. 안 쓰는 UPM 패키지(Addressables / Input System / UGUI)를 제거하는 것도 이제 지원됩니다. 의존 어셈블리는 — 함께 배포되는 테스트·샘플 어셈블리까지 포함해 — defineConstraints로 스스로 빠지고, Bootstrap은 해당 등록을 건너뜁니다(UI Panel Stack은 NullPanelStack으로 폴백). 세 패키지 모두 기본으로는 여전히 자동 설치됩니다. link.xml은 이제 모듈 단위라, 옵션 어셈블리의 IL2CPP 보존 항목은 그 어셈블리와 함께 빠집니다. 씬 로드 취소는 정직한 계약으로 바뀌었습니다(동작 breaking). 기존의 "활성화를 막아 두고, 새 씬의 OnEnable은 절대 실행되지 않는다"는 약속은 애초에 구현이 불가능했습니다 — Unity는 활성화되지 않은 로드 뒤로 AsyncOperation 큐 전체를 세워 두기 때문에, 취소 한 번이 프로세스가 살아 있는 내내 이후의 모든 씬 로드를 얼려 버렸습니다. 이제 백엔드 로드가 발행되기 전의 취소는 진짜 취소이고, 그 이후의 취소는 씬 전환이 완료되되 SceneLoadCanceled가 활성화 전에 — 떠나는 씬의 구독자들이 아직 살아 있을 때 — 발행됩니다. 수정 사항: 에디터 플레이 종료 시 정리가 조용히 no-op으로 끝나던 문제를 고쳤습니다(레지스트리가 LIFO Dispose 체인보다 먼저 비워져 업적 디스크 플러시와 에셋 핸들 해제까지 건너뛰었습니다). 오디오는 실제 시간으로 재생되는데 SFX 자동 반환은 스케일된 게임 시간으로 돌던 문제도 고쳤습니다(이제 unscaled 기준이고 피치도 반영합니다). TimeServiceTicker는 이제 [DefaultExecutionOrder(-100)]을 선언해, 여러분의 스크립트가 그 프레임의 delta를 두고 경합하지 않습니다. IConfiguration.Set<T>는 여러분의 인스턴스를 제자리에서 클램프하는 대신 내부 복사본을 저장합니다. 추가 사항: InputServiceOptions.AlwaysEnabledMaps(컨텍스트 전환에도 UI/Debug 액션 맵을 계속 켜 둡니다), IPanelVisual(옵트인 패널 페이드 전환에 더해, 옵션이 늘 약속해 온 모달 백드롭), GraphicsSettingsApplier(품질 / 해상도 / 전체 화면 / vSync / 프레임 상한이 이제 정말 Unity에 적용됩니다), ISaveStorageBackend(세이브 저장 매체를 주입할 수 있습니다 — 암호화 세이브, 커스텀 경로, Steam Cloud, 새 Steam 레시피 문서 포함), FileLogger(재실행 후에도 남는 옵트인 로테이팅 파일 로그), 그리고 지연(Deferred) 저장 설정이 이제 포커스를 잃을 때도 플러시됩니다. 서비스는 여전히 23개, 서드파티 의존성은 여전히 0개이며, 자동화된 EditMode 테스트는 2,665개입니다.
최초로 공개된 릴리스입니다. 공개되지 않은 1.14.0 빌드 이후 Core 서비스 3개가 추가되어 20개에서 23개가 되었고, 등록은 여전히 Bootstrap.Run() 한 줄이 전부입니다. 추가된 서비스는 Addressable Scene(IAddressableSceneService — Addressables 카탈로그에서 비동기 additive 씬 로드/언로드, 키별 참조 카운트, 런타임 데이터에는 예외를 던지지 않음), Deferred Event Queue(IDeferredBus — 지금 이벤트를 캡처해 두고 원하는 Flush() 시점에 발행), Command Registry(ICommandRegistry — 등록 / 토큰화 / 실행에 히스토리와 접두사 자동완성을 더한 런타임 커맨드 코어. 인게임 콘솔 UI는 직접 만드는 구조입니다) 세 가지입니다. 샘플은 임포트 가능한 7개로 늘었고, 그중 4개는 그대로 실행되는 완성된 씬입니다. Motion Lab(이징 8종 트윈 갤러리, 웨이포인트 시퀀싱, 그리고 Clock 분리를 눈으로 확인하는 장면 — 게임플레이 TimeScale을 0으로 두면 갤러리는 멈추지만 UI 스피너는 계속 돕니다), Save/Load + Seeded Random(Load 직후 뽑은 시드 기반 난수 3개가 Save 시점에 예고해 둔 값과 정확히 일치합니다), M25 Command Console(히스토리와 자동완성이 실제로 동작하는 인게임 개발자 콘솔), 그리고 RPG Starter 코드 템플릿입니다. Tools ▸ Common Game System 아래에는 에디터 도구가 새로 들어갔습니다. Welcome / Quick Start 창(환경 점검, 샘플 원클릭 임포트)과 런타임 Service Debugger(서비스 레지스트리 실시간 조회, Clock별 타임스케일, 활성 tween/FSM/audio/command 통계)입니다. 수정 사항: 저장해 둔 오디오 설정이 부팅 시점에 제대로 적용되도록 고쳤고(믹서 초기화 경합), UI 샘플의 볼륨/음소거 컨트롤이 즉시 반응하도록 바꾸면서 효과를 귀로 확인할 수 있게 캐논 D장조 BGM 루프를 함께 넣었습니다(곡은 퍼블릭 도메인, 녹음은 퍼블리셔 자체 제작). 그 밖에 패널 내비게이션 NullReferenceException, "No cameras rendering" 워터마크, 플레이 종료 시 정리 과정에서 나던 예외를 해결했습니다. 서드파티 의존성은 여전히 0개이고, IL2CPP 대응 · 렌더 파이프라인 비의존 · 자동화된 EditMode 테스트 2,550개도 그대로입니다.
심사를 신청했지만 공개되지 않은 빌드입니다. 2026년 6월 15일 Unity Asset Store에 제출했으나 심사가 진행되지 않아 누구에게도 전달된 적이 없습니다. 설치할 수 있었던 버전이 아니라 개발 기록의 일부로 남겨 둡니다. Bootstrap.Run() 한 줄로 등록되는 프로덕션 서비스 20개 — Service Locator, Logger, Event Bus, Save/Load, Configuration, Input, Time, Object Pool, Audio, UI Panel Stack, Scene Flow (+additive), Localization, Achievements/Stats, Scheduler, Tween, Asset Provider, Random, FSM, Pushdown Stack, Tween Sequencing. 서드파티 의존성 0개, IL2CPP 대응, 렌더 파이프라인 비의존, AI 대응(AGENT.md + 태스크 스킬 5개). 1.14.0 이전 버전은 전부 내부 개발 마일스톤이었습니다.
버전별 전체 엔지니어링 체인지로그는 패키지 안에 그대로 들어 있습니다 (CHANGELOG.md).
법적 고지
Common Game System은 Unity Asset Store를 통해서만 배포되는 proprietary(독점) 소프트웨어입니다. 사용 조건은 Unity Asset Store EULA를 따릅니다.
서드파티 런타임 의존성 0개. 함께 쓰는 Unity 패키지는 Unity Companion License를 따릅니다 (THIRD-PARTY-NOTICES.md 참조). Copyright © 2026 JoGyoungJun. All Rights Reserved.
지원