Logger
01ILoggerCategorized logging with build-tiered levels and category filters. Thread-safe.
A headless C# foundation framework for Unity 6.3 LTS PC single-player projects. Headless means code, not scenes — after import, your Hierarchy does not change. Twenty-three services — save/load, input, scene flow, audio, UI panels, tweening, state machines, and more — all start from one automatic Bootstrap.Run(). No DI container, no scene singletons, no setup code in your game scripts.
Start here
CGS is code, not scenes. After import, nothing appears in your scene Hierarchy — the framework works invisibly in the background. The visible parts are the Welcome window and the demo scene. Here is the fastest tour:
bootstrap complete (v2.1.0, 23 services) confirms that every service started.Prefer reading offline? A paginated PDF manual with a table of contents and annotated screenshots ships inside the package at Documentation/CGS-Manual.pdf.
Overview
Engine
Unity 6.3 LTS (6000.3.11f1) · .NET Standard 2.1
Services
23 — all started by one automatic bootstrap before your first script runs
Runtime assemblies
7 — Core (18 services, zero package references) + Input / UI / Localization / Assets / AddressableScene / Bootstrap. Remove an unused Unity package (Input System / uGUI / Addressables) and the dependent assemblies exclude themselves; Bootstrap falls back instead of breaking your build
Third-party deps
0 — only the Unity engine plus first-party Addressables / Input System / uGUI, each optional since 2.0.0
Scripting backend
Mono and IL2CPP. The framework ships its own preserve rules ([Preserve] + a link.xml per module). CI builds an IL2CPP standalone player on every push
Render pipeline
Works with URP, HDRP, Built-in, or a custom pipeline — the framework contains no rendering code
Tests
2,600+ automated tests ship inside the package, hidden by default. Import them with one click from the Welcome window
Demo scene
MotionLab.unity — open it and press Play, no setup. A tween easing gallery, tween sequences, scheduler timers, and a Time Scale slider that freezes gameplay while the UI clock keeps moving
Samples
6 importable from the Welcome window — 3 runnable scenes (UI Panel Stack · Save/Load + Seeded Random · Command Console) and 3 script templates (Scene Flow · Localization · RPG Starter)
Manual & docs
A paginated PDF manual with a table of contents and annotated screenshots (Documentation/CGS-Manual.pdf), plus a plain-English reference page per service (Documentation/Modules/)
Editor tooling
Welcome window (auto-opens once per package version; reopen via Tools > Common Game System > Welcome) + runtime Service Debugger
License
Proprietary — Unity Asset Store EULA
Platforms
PC (Windows / macOS / Linux), single-player
Quick Start
The framework boots itself — there is no initialization call to make. The script below compiles exactly as pasted; drop it on any GameObject in your first scene.
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."));
}
}That's it — all 23 services were registered before your Start() ran.
Good habits
Reference
ILoggerCategorized logging with build-tiered levels and category filters. Thread-safe.
IObjectPoolServicePrefab pooling with an IPoolable lifecycle — per-category pools, prewarm, automatic return.
ITimeServicePer-clock time, pause, and slow motion — the Gameplay, UI, and Background clocks run independently.
IEventBusType-safe publish/subscribe for decoupled, game-wide messaging.
ISaveServiceJSON save slots with safe atomic writes and versioned migration hooks.
IConfigurationTyped settings groups (audio / graphics / input) that persist the moment you set them.
IInputKeyMapSourceOwns the Input Actions asset and stores each player's key rebindings across sessions.
IInputServiceInput System wrapper — action-map contexts and key rebinding.
IAudioServiceMusic / SFX / voice channels over an AudioMixer — pooled sources, fades, volume binding.
IPanelStackPanel push/pop with modals and full gamepad / keyboard focus handling.
ISceneServiceAsync scene loading with a loading screen and cancel, plus additive load/unload.
ILocalizationServiceKey-to-string lookup with a runtime language switch — bound texts update live, no restart.
IAchievementServiceLocal stats and achievements with threshold auto-unlock, persisted through the save service.
ISchedulerAfter / Every / NextFrame timers plus run-on-main-thread dispatch — pause and slow-motion aware.
ITweenServicePause-aware value tweening with 31 easing curves and typed To/From overloads.
IAssetProviderAddressables-backed async loading with reference counting and scope-bound auto-unload.
IRandomServiceDeterministic seeded RNG with named, forkable streams and save/restore snapshots.
IStateMachineServiceFactory for flat finite-state machines over your own context type, with guarded transitions.
IPushdownStackServiceA stack of resumable game-state scopes — dialogue over gameplay, menu back-stacks.
ITweenSequenceServiceOrdered and parallel tween timelines over the tween service, built with a fluent builder.
IAddressableSceneServiceAdditive scene load/unload from the Addressables catalog, with per-key reference counting.
IDeferredBusQueue an event now, publish it at a Flush() you choose — for example, outside a physics callback.
ICommandRegistryRuntime command registry — register, tokenize, execute, history, autocomplete. The console UI is yours.
Every service has a plain-English reference page inside the package (Documentation/Modules/) and a Null (no-op) implementation you can swap in with one line.
How it works
Releases
The newcomer release — documentation and packaging rebuilt so someone who has never seen CGS is productive in minutes. Every runtime folder and reference doc now carries a plain English name (Bootstrap, SaveLoad, Tween, …); the old internal number prefixes are gone from folders and file names. A visible demo scene ships at Assets/CommonGameSystem.Core/Demo/MotionLab.unity — open it and press Play, no setup. It shows a tween easing gallery, a tween-sequence showcase, scheduler timers, and a Time Scale slider that freezes gameplay while the UI clock keeps moving; it needs only the built-in uGUI package. The Welcome window was rebuilt around "Try the demo — 60 seconds": it auto-opens once per package version, is reachable via both Tools > Common Game System > Welcome and Window > Common Game System > Welcome, and offers one-click sample import, quick links (PDF manual / documentation / changelog / module reference), and collapsed environment checks. Samples are now six — UI Panel Stack, Save/Load + Seeded Random, and Command Console are runnable scenes; Scene Flow, Localization, and RPG Starter are step-by-step script templates. (Motion Lab graduated from sample to always-visible demo.) A paginated PDF manual with a table of contents and annotated screenshots ships at Documentation/CGS-Manual.pdf; AI assistant files moved to Documentation/AI/. The 2,600+ automated tests still ship inside the package but now stay hidden until you import them with one click from the Welcome window — they no longer compile into every buyer project. Still 23 services and 0 third-party dependencies.
The seven-assembly release. The single CommonGameSystem.Core runtime assembly is now seven — Core (18 services with zero package dependencies, plus the pure UI contracts), Input, UI, Localization, Assets, AddressableScene, Bootstrap — so you reference only what you actually use. Breaking only for projects with their own asmdef, and only in the references list: no source changes, namespaces are all still CommonGameSystem.Core, and Assembly-CSharp projects are unaffected. Removing an unused UPM package (Addressables / Input System / UGUI) is now supported: dependent assemblies — the shipped test and sample assemblies included — self-exclude via defineConstraints, and Bootstrap skips their registration (the UI Panel Stack falls back to NullPanelStack). All three packages still install by default. link.xml is now per-module, so each optional assembly's IL2CPP preserve entries leave with it. Scene-load cancel got an honest contract (breaking behaviour): the old "activation blocked, new-scene OnEnable never runs" promise was unimplementable — Unity stalls the entire AsyncOperation queue behind a non-activated load, so one cancel froze every later scene load for the life of the process. Now a cancel before the backend load is issued is a true cancel; after it, the scene change completes and SceneLoadCanceled is published before activation, while subscribers in the outgoing scene still exist. Fixes: editor play-exit teardown ran as a silent no-op (the registry cleared before the LIFO Dispose chain, skipping achievement flush-to-disk and asset-handle release); SFX auto-release ran on scaled game time while audio plays in real time (now unscaled and pitch-aware); TimeServiceTicker now declares [DefaultExecutionOrder(-100)], so your scripts no longer race it for the frame's delta; IConfiguration.Set<T> stores a private copy instead of clamping your instance in place. New: InputServiceOptions.AlwaysEnabledMaps (keep a UI/Debug action map live across context switches), IPanelVisual (opt-in panel fade transitions plus the modal backdrop the options always promised), GraphicsSettingsApplier (quality / resolution / fullscreen / vSync / frame cap now actually reach Unity), ISaveStorageBackend (the save medium is injectable — encrypted saves, custom locations, Steam Cloud, with a new Steam recipe doc), FileLogger (opt-in rotating file log that survives a relaunch), and deferred settings now also flush on focus loss. Still 23 services and 0 third-party dependencies; 2,665 automated EditMode tests.
The initial published release. Three Core services were added since the unpublished 1.14.0 build (20 → 23), wired by the same single Bootstrap.Run(): Addressable Scene (IAddressableSceneService — async additive scene load/unload from the Addressables catalog, per-key refcount, never-throw runtime data), Deferred Event Queue (IDeferredBus — capture an event now and publish it later at a chosen Flush() point), and Command Registry (ICommandRegistry — a runtime command nucleus with register / tokenize / execute, history and prefix autocomplete; the in-game console UI stays yours). Samples grew to 7 importable, 4 of them fully assembled runnable scenes: Motion Lab (8-ease tween gallery, waypoint sequencing, and the per-Clock money shot — gameplay TimeScale 0 freezes the gallery while the UI spinner keeps moving), Save/Load + Seeded Random (after Load, the next three seeded rolls exactly match the prediction armed at Save), M25 Command Console (working in-game dev console with history and autocomplete), plus an RPG Starter code template. New editor tooling under Tools ▸ Common Game System: a Welcome / Quick Start window (environment checks, one-click sample import) and a runtime Service Debugger (live service registry, per-Clock time scales, active tween/FSM/audio/command stats). Fixes: persisted audio settings now apply at boot (mixer early-init race), the UI sample's volume/mute controls act immediately and now ship a Canon in D BGM loop (public-domain composition, first-party synthesized recording) so you can hear them work, panel-navigation NullReferenceException, the "No cameras rendering" watermark, and a play-exit teardown exception. Still 0 third-party dependencies; IL2CPP-ready; URP-agnostic; 2,550 automated EditMode tests.
Submitted for review; never published. This build was sent to the Unity Asset Store on 2026-06-15 but was never reviewed, so it never reached anyone — it is kept here as part of the engineering record, not as a version you could have installed. 20 production services wired by a single Bootstrap.Run() — 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 third-party dependencies, IL2CPP-ready, URP-agnostic, AI-ready (AGENT.md + 5 task skills). Versions prior to 1.14.0 were internal development milestones.
Full per-version engineering changelog ships inside the package (CHANGELOG.md).
Legal
Common Game System is proprietary software distributed exclusively through the Unity Asset Store. Use is governed by the Unity Asset Store EULA.
0 third-party runtime dependencies; bundled Unity packages use the Unity Companion License (see THIRD-PARTY-NOTICES.md). Copyright © 2026 JoGyoungJun. All Rights Reserved.
Support