Logger(日志)
01ILogger分类日志:按构建分级的日志等级、分类过滤。线程安全。
面向 Unity 6.3 LTS、PC 单机项目的 headless(无渲染)纯 C# 底层框架。headless 的意思是:它是代码,不是场景——导入之后你的 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(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 打一个 Standalone 播放器
渲染管线
URP / HDRP / Built-in / 自定义管线都能用——框架内没有一行渲染代码
测试
2,600 多个自动化测试随包发布、默认隐藏。在 Welcome 窗口一键即可导入
演示场景
MotionLab.unity——打开按 Play 即可,零配置。补间缓动画廊、补间序列、调度器计时器,还有一个把游戏玩法冻住、UI 时钟却继续转的 Time Scale 滑块
示例
6 个,均可在 Welcome 窗口导入——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
许可协议
专有软件——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."));
}
}就这些——你的 Start() 执行之前,23 个服务就已经全部注册完毕。
好习惯
参考
ILogger分类日志:按构建分级的日志等级、分类过滤。线程安全。
IObjectPoolService基于 IPoolable 生命周期的预制体池——按类别分池、预热、自动回收。
ITimeService按时钟计算的时间、暂停与慢动作——Gameplay / UI / Background 三个时钟各走各的。
IEventBus类型安全的发布 / 订阅,用于解耦的全局消息传递。
ISaveServiceJSON 存档槽位、安全的原子写入、带版本的迁移钩子。
IConfiguration强类型设置分组(音频 / 画面 / 输入),改完立即持久化。
IInputKeyMapSource持有 Input Actions 资产,并跨会话保存玩家的按键重绑定。
IInputServiceInput System 封装——action map 上下文与按键重绑定。
IAudioService架在 AudioMixer 上的音乐 / SFX / 语音通道——源池化、淡入淡出、音量绑定。
IPanelStack面板压栈 / 出栈,支持模态窗口与完整的手柄 / 键盘焦点管理。
ISceneService异步场景加载,带加载界面与取消;另支持叠加式加载 / 卸载。
ILocalizationService键 → 字符串查询与运行时语言切换——已绑定文本即时更新,无需重启。
IAchievementService本地统计与成就,达阈值自动解锁,经存档服务持久化。
IScheduler感知暂停与慢动作的 After / Every / NextFrame 计时器,外加回到主线程的派发。
ITweenService感知暂停的数值补间——31 条缓动曲线,封闭的强类型 To/From 重载。
IAssetProvider基于 Addressables 的异步加载——引用计数 + 作用域结束自动卸载。
IRandomService确定性种子随机——具名可分叉的随机流,快照 / 恢复与存档严丝合缝。
IStateMachineService扁平有限状态机工厂,跑在你自定义的上下文类型之上,状态转换可加守卫条件。
IPushdownStackService可恢复游戏状态作用域的栈——对话压在玩法之上、菜单返回栈。
ITweenSequenceService架在补间服务之上的顺序 + 并行时间线,用链式构建器组装。
IAddressableSceneService从 Addressables 目录叠加加载 / 卸载场景——按 key 引用计数。
IDeferredBus此刻先把事件入队,在你选定的 Flush() 时机再发布——例如挪出物理回调。
ICommandRegistry运行时命令注册表——注册 / 分词 / 执行、历史、自动补全。控制台 UI 由你自己写。
每个服务在包内都配有一页平实易懂的参考文档(Documentation/Modules/),以及一行代码即可换上的 Null 空实现。
工作原理
版本发布
写给新手的版本——文档与打包全部重做,让从未见过 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(18 个零包依赖的服务,外加纯 UI 契约)、Input、UI、Localization、Assets、AddressableScene、Bootstrap——只引用你用得到的。破坏性变更只影响自带 asmdef 的项目,而且只动引用列表:源码零改动,命名空间全部保持 CommonGameSystem.Core,Assembly-CSharp 项目不受影响。不用的 UPM 包(Addressables / Input System / UGUI)现在可以直接移除:依赖它的程序集——随包发布的测试与示例程序集也在内——会经 defineConstraints 自动排除,Bootstrap 跳过它们的注册(UI Panel Stack 降级为 NullPanelStack)。三个包默认仍会自动安装。link.xml 改为按模块拆分,每个可选程序集的 IL2CPP preserve 条目随它一并带走。场景加载的取消换上了一份诚实的契约(行为上的破坏性变更):旧的承诺——“阻止激活、新场景的 OnEnable 永不执行”——根本无法实现,因为 Unity 会让整条 AsyncOperation 队列卡在一个未激活的加载后面,一次取消就把此后进程里所有的场景加载全部冻住。现在:在后端加载发出之前取消,是真正的取消;发出之后取消,场景切换照常完成,并在激活之前发布 SceneLoadCanceled——此时旧场景里的订阅者都还在。修复:编辑器退出 Play 的拆卸此前是个悄无声息的空操作(注册表在 LIFO Dispose 链之前就被清空,成就落盘与资源句柄释放全被跳过);SFX 自动回收跑在受缩放的游戏时间上,而音频播放走的是真实时间(现改用不受缩放的时间,并把 pitch 计算在内);TimeServiceTicker 现在声明 [DefaultExecutionOrder(-100)],你的脚本不会再和它抢当帧的 delta;IConfiguration.Set<T> 现在存入一份私有副本,而不是在原地 clamp 你传入的实例。新增:InputServiceOptions.AlwaysEnabledMaps(让 UI / Debug action map 跨上下文切换保持常开)、IPanelVisual(可选启用的面板淡入淡出转场,外加选项里一直承诺的模态背景遮罩)、GraphicsSettingsApplier(画质 / 分辨率 / 全屏 / 垂直同步 / 帧率上限现在真的会应用到 Unity)、ISaveStorageBackend(存档介质可注入——加密存档、自定义位置、Steam Cloud,并新增一篇 Steam 接入指南)、FileLogger(可选启用的轮转文件日志,重启之后依然还在),另外延迟写入的设置现在在失去焦点时也会落盘。依旧是 23 个服务、0 个第三方依赖;2,665 个自动化 EditMode 测试。
首个正式发布的版本。相比未发布的 1.14.0 构建,新增了 3 个 Core 服务(20 → 23),同样由那一句 Bootstrap.Run() 装配完成:Addressable Scene(IAddressableSceneService——从 Addressables 目录异步叠加加载 / 卸载场景,按 key 引用计数,运行时数据出错不抛异常)、Deferred Event Queue(IDeferredBus——此刻先采集事件,之后在你选定的 Flush() 时机再发布)、Command Registry(ICommandRegistry——运行时命令内核,注册 / 分词 / 执行,带历史记录与前缀自动补全;游戏内控制台 UI 仍由你自己写)。示例增加到 7 个可导入,其中 4 个是搭好就能跑的完整场景:Motion Lab(8 条缓动曲线的补间画廊、路点序列,以及最出彩的按 Clock 分离演示——把 gameplay 的 TimeScale 调到 0,画廊静止不动,UI 的转圈照常运转)、Save/Load + Seeded Random(Load 之后接下来三次种子随机的结果,与 Save 时立下的预言分毫不差)、M25 Command Console(能用的游戏内开发者控制台,带历史与自动补全),外加一个 RPG Starter 代码模板。Tools ▸ Common Game System 下新增编辑器工具:Welcome / Quick Start 窗口(环境自检、一键导入示例)与运行时 Service Debugger(实时服务注册表、各 Clock 的时间缩放、当前 tween / FSM / 音频 / 命令统计)。修复:已持久化的音频设置现在会在启动时正确生效(mixer 早期初始化竞态);UI 示例的音量 / 静音控件即时响应,并随包附带一段《D 大调卡农》BGM 循环(乐曲属公有领域,录音为我方合成自制),这样你能听得出来它确实在工作;面板导航的 NullReferenceException;“No cameras rendering”水印;以及退出 Play 时的拆卸异常。依旧是 0 个第三方依赖、IL2CPP 就绪、不绑定渲染管线、2,550 个自动化 EditMode 测试。
已提交审核,但从未发布。该构建于 2026-06-15 提交至 Unity Asset Store,但一直没有进入审核,因此从未到达任何人手里——它保留在这里是作为工程记录的一部分,而不是一个你曾经可以安装的版本。20 个生产级服务,由一句 Bootstrap.Run() 装配完成——Service Locator、Logger、Event Bus、Save/Load、Configuration、Input、Time、Object Pool、Audio、UI Panel Stack、Scene Flow(含叠加)、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 分发,使用须遵守 Unity Asset Store EULA。
0 个第三方运行时依赖;随包引用的 Unity 官方包适用 Unity Companion License(详见 THIRD-PARTY-NOTICES.md)。Copyright © 2026 JoGyoungJun. All Rights Reserved.
支持