主路由器 —— 游戏开发技能调度器
游戏开发工作的入口点。它通过分析项目指纹来选定一个引擎,根据请求对任务进行分类,确定最少的专业技能集合,并指示你在操作前先阅读这些技能。它负责调度和组合 —— 不会重新教授引擎API。
何时使用
- 在任何游戏开发请求开始时 —— 无论是构建还是调试游戏、关卡、玩家、敌人、着色器、UI、存档系统、多人游戏、输入、音频、AI、对话或程序化内容 —— 用于决定加载哪些技能。
- 当用户提到某个引擎或类型、说“制作一个游戏”、或询问“我应该使用哪个技能?”时使用。
何时不使用: 一旦正确的技能已加载且任务明确在该技能范围内,就应依据该技能工作 —— 不要在每一步都重新运行路由器。仅当任务转向到新的引擎或关注点时(参见路由器步骤6)才重新路由。
路由算法
- 检测引擎 —— 项目指纹 → 最多一个引擎技能集(或“未知”)。§1.
- 分类任务 —— 表述 → 学科(s) + 最多一个类型 + 工作流(s)。§2.
- 解析 —— 最小集合:引擎技能(s) + 学科(s) + 类型 + 工作流(s)。§3.
- 读取(披露) —— 只打开所选
SKILL.md内容;references/仅按需读取。§4. - 组合 —— 顺序:引擎基础 → 学科概念 → 类型粘合 → 工作流。§5.
- 降级 —— 引擎未知或没有匹配的技能 → 询问或默认使用Godot;明确说明任何差距。§6.
1. 引擎检测(项目指纹)
扫描置信度最高的信号;选择恰好一个引擎。在第一个匹配处停止。
| # | 引擎 | 主要信号 | 技能集根目录 |
|---|---|---|---|
| 1 | Godot | project.godot | skills/godot/ |
| 2 | Unreal | *.uproject | skills/unreal/ |
| 3 | Unity | Assets/ 和 ProjectSettings/ProjectVersion.txt | skills/unity/ |
| 4 | Bevy | Cargo.toml 包含 bevy 依赖 | skills/other-engines/bevy-ecs/ |
| 5 | Phaser | package.json 依赖 phaser | skills/web-engines/phaser-* |
| 6 | PixiJS | package.json 依赖 pixi.js | skills/web-engines/pixijs-rendering/ |
| 7 | three.js | package.json 依赖 three | skills/web-engines/threejs-* |
| 8 | LÖVE | conf.lua / main.lua 调用 love.* | skills/other-engines/love2d-core/ |
| 9 | pygame | *.py 包含 import pygame | skills/other-engines/pygame-core/ |
| 10 | Roblox | *.rbxl(x) / *.project.json (Rojo) | skills/other-engines/roblox-* |
对于次要信号、Godot-C#/Unity/Bevy 和多引擎消除歧义规则、单体仓库以及纯文本引擎提及,请阅读 references/engine-detection.md。
2. 任务分类(表述 → 类别)
在引擎确定后,阅读请求中的任务信号(三个可叠加类别):
- 学科(跨引擎概念):
game-ai、procedural-gen、dialogue-systems、save-systems、audio-design、shader-programming、physics-tuning、level-design、input-systems、game-feel、camera-systems、game-ui-ux、performance-optimization。 由概念词汇触发(“寻路”、“存档槽”、“片段着色器”、“屏幕抖动”、“摄像机跟随”、“HUD/菜单”、“优化/低帧率”)。 - 类型(完整游戏模板):
platformer、roguelike、rpg、fps-shooter、tower-defense、card-game、visual-novel、survival-crafting、puzzle。 由类型词汇触发(“制作一个Roguelike”、“卡牌构筑器”)。 - 工作流(流程/发布):
game-jam、prototype-fast、steam-publish、itch-publish。 由流程词汇触发(“在Steam上发布”、“垂直切片”)。
文件信号可强化此判断:*.yarn/*.ink → dialogue-systems/visual-novel;steam_appid.txt → steam-publish;*.inputactions → unity-input-system。
3. 路由表(任务 → 类别 → 技能)
3a. 引擎技能 —— 读取与检测到的引擎+子任务匹配的那一个
- Godot (
skills/godot/):语言godot-gdscript/godot-csharp;结构godot-nodes-scenes、godot-signals-groups;2Dgodot-2d-movement、godot-tilemap;3Dgodot-3d-essentials;物理godot-physics;UIgodot-ui-control;动画godot-animation;着色器godot-shaders;数据godot-resources;音频godot-audio;网络godot-multiplayer;发布godot-export。 - Unity (
skills/unity/):脚本unity-csharp-scripting;输入unity-input-system;物理unity-physics;动画unity-animation;数据unity-scriptableobjects;2Dunity-tilemap-2d;AI导航unity-navmesh;发布unity-build-pipeline。 - Unreal (
skills/unreal/):可视化脚本unreal-blueprints;C++ 游戏玩法unreal-cpp-gameplay;输入unreal-enhanced-input;AIunreal-behavior-trees;VFXunreal-niagara;发布unreal-packaging。 - Web (
skills/web-engines/):phaser-core、phaser-arcade-physics;pixijs-rendering;threejs-scene-setup、threejs-gltf-loading、threejs-materials-lighting。 - 其他 (
skills/other-engines/):bevy-ecs、pygame-core、love2d-core、roblox-luau、roblox-datastores。
3b. 学科 —— 与引擎技能一同加载(概念 ↔ 引擎API)
| 概念(用户提及) | 学科技能 | 搭配的(引擎API) |
|---|---|---|
| 敌人AI、行为树、寻路、转向 | game-ai | unity-navmesh / unreal-behavior-trees / Godot导航 |
| 程序化、噪声、种子、地牢生成器 | procedural-gen | 引擎Tilemap/网格技能 |
| 对话、Yarn、Ink、对话树 | dialogue-systems | 引擎UI技能 |
| 存档/读档、槽位、持久化 | save-systems | roblox-datastores / 引擎IO |
| 自适应音乐、混音器、闪避、音效 | audio-design | godot-audio / Unity AudioMixer |
| 着色器、片段、溶解/描边 | shader-programming | godot-shaders / 引擎材质 |
| 抖动、隧道效应、固定时间步长 | physics-tuning | godot-physics / unity-physics |
| 白盒、布局、瓦片布局、节奏 | level-design | godot-tilemap / unity-tilemap-2d |
| 按键绑定、手柄、输入缓冲 | input-systems | unity-input-system / unreal-enhanced-input / Godot InputMap |
| 屏幕抖动、命中暂停、动感、挤压和拉伸、“让它有冲击感” | game-feel | 引擎动画/缓动 + camera-systems(抖动) |
| 摄像机跟随、死区、超前视野、轨道、第一人称 | camera-systems | godot-2d-movement / godot-3d-essentials / Cinemachine |
| HUD、菜单、UI布局、缩放、安全区域、焦点导航 | game-ui-ux | godot-ui-control / Unity UI (UGUI/UI Toolkit) |
| 帧率低、优化、绘制调用、GC尖峰、对象池、性能分析器 | performance-optimization | 引擎性能分析器 + physics-tuning |
3c. 类型 —— 组合引擎 + 学科(将 * 绑定到检测到的引擎)
| 类型(用户提及) | 组合方式 |
|---|---|
| 平台游戏、跳跃、二段跳 | godot-2d-movement(或引擎物理)+ godot-tilemap/unity-tilemap-2d + level-design + camera-systems + game-feel |
| Roguelike、程序化地牢、永久死亡 | procedural-gen + godot-tilemap/unity-tilemap-2d + game-ai + save-systems + game-feel |
| RPG、属性、背包、任务 | godot-resources/unity-scriptableobjects + dialogue-systems + save-systems + game-ui-ux |
| FPS、第一人称、即时命中 | godot-3d-essentials/unreal-cpp-gameplay + input-systems + game-ai + camera-systems + game-feel |
| 塔防、波次、路径 | game-ai + 引擎移动 + level-design + game-ui-ux |
| 卡牌游戏、卡牌构筑器、TCG | godot-resources/unity-scriptableobjects + game-ui-ux(+ 引擎UI) |
| 视觉小说、分支剧情 | dialogue-systems + save-systems + game-ui-ux |
| 生存、制作、采集 | save-systems + godot-resources/unity-scriptableobjects + procedural-gen + game-ui-ux |
| 解谜、三消、网格逻辑 | godot-tilemap/unity-tilemap-2d + level-design + game-feel |
3d. 工作流 —— 独立于引擎的流程与发布
game-jam(Game Jam、48小时、Ludum Dare/GMTK)· prototype-fast(垂直切片、MVP、灰盒)·
steam-publish(Steam、Steamworks、depot;steam_appid.txt)· itch-publish(itch.io、butler;.itch.toml)。
有关每个技能的完整触发列表和所有引擎绑定,请阅读 references/routing-table.md。
4. 读取协议(渐进式披露)
- 预加载: 只有每个技能的
name+description在上下文中。根据这些信息加上项目指纹决定 —— 不要预读技能正文。 - 选定后: 读取每个所选
skills/<category>/<name>/SKILL.md的正文 —— 且仅读取这些。绝不要批量加载整个类别。 - 按需: 仅当子任务需要该深度时(技能正文会说明),才读取技能附带的
references/文件。 - 转向时重新路由: 如果任务发生变化(从移动改为存档),选择并读取新相关的技能,而不是保持所有已加载的技能。
说明你加载了什么以及原因,例如:“检测到Godot(project.godot)。正在加载 godot-2d-movement 用于控制器,以及 platformer 用于跳跃手感;如果需要土狼时间/缓冲,将打开平台游戏技能的 feel-tuning.md 参考文件。”
5. 组合规则
- 一个引擎集合,可叠加概念。 恰好一个引擎技能集;添加任务所需的学科,并且通常最多一个类型。工作流独立附加。
- 顺序: 引擎基础 → 学科概念 → 类型编排 → 工作流。
- 重叠时的所有权: 引擎技能拥有API/语法;学科技能拥有可移植概念/算法,并将代码实现推迟给引擎技能;类型技能拥有结构/粘合,并链接到外部,而不是重新教授基础知识。
- 交接: 当一个类型的
composes命名了一个如*-2d-movement的插槽时,将其绑定到检测到的引擎。如果该引擎缺少精确技能,请参见 §6 和references/routing-table.md(“绑定缺口”)。
6. 未知引擎 & 无技能降级
引擎未知(无指纹,未提及引擎名称):
- 检查请求中是否有纯文本的引擎名称(“在Unity中”、“使用Phaser”)。如果找到,采用它。
- 如果任务纯粹是概念/类型/工作流问题,直接路由到与引擎无关的学科/类型/工作流技能 —— 不需要引擎(“什么格式适合存档?” →
save-systems)。 - 仅当引擎选择确实阻碍了答案时,提出一个有针对性的问题(“哪个引擎 —— Godot、Unity、Unreal,还是Web或其他引擎?”)。如果用户没有偏好且确实需要,则默认使用Godot(这里覆盖最全面的引擎)并说明。
- 绝不要凭空猜测引擎或加载引擎技能。
引擎已知但没有技能覆盖子任务: 加载最接近的引擎技能加上相关学科,并明确说明差距(例如“没有专门的Unity 2D移动技能;正在使用 unity-csharp-scripting + unity-physics”)。绝不要编造技能名称。
冲突/多个类型: 从表述中选择主导类型;提及次要类型并提供给用户确认后加载。
实际示例
| 请求 | 检测到的引擎 | 加载的技能(按顺序) |
|---|---|---|
| “给我的Godot角色添加二段跳” | Godot(project.godot) | godot-2d-movement → platformer |
| “为我的Unity RPG制作一个背包系统” | Unity(Assets/+ProjectSettings/) | unity-scriptableobjects → rpg → save-systems |
| “在Godot中制作程序化地牢Roguelike” | Godot | godot-tilemap → procedural-gen → roguelike |
“从 .yarn 文件引入分支对话” | (不需要) | dialogue-systems(+ 如果检测到引擎则加载引擎UI技能) |
| “如何设计带有数据迁移的存档槽?” | (不需要) | save-systems 仅 |
| “使用butler在itch上发布我的游戏” | (任意/无) | itch-publish 仅 |
| “我想做个游戏但不知道用什么” | 未知 → 询问,默认Godot | 路由器询问一次;然后例如 godot-nodes-scenes |
| “让我的Godot游戏中的命中反馈更有冲击力” | Godot(project.godot) | game-feel(+ camera-systems 用于抖动) |
| “摄像机应平滑跟随我的角色” | (检测到的引擎) | camera-systems(+ 引擎移动技能) |
| “我的Unity游戏掉到30帧,优化一下” | Unity(Assets/+ProjectSettings/) | performance-optimization(先性能分析) → 引擎技能 |
参考
- 完整的引擎指纹、次要信号和消除歧义方法:
references/engine-detection.md。 - 每个技能的详尽触发词、引擎绑定和绑定缺口:
references/routing-table.md。