setup-engine

$npx mdskill add pixel-cellar/Claude-Code-Game-Studios/setup-engine

配置游戏引擎和版本,确保知识覆盖并补充缺失信息

  • 解决项目缺少明确引擎配置或版本不匹配的问题
  • 依赖文件读取、网络搜索和用户输入进行决策
  • 根据游戏类型、平台、团队规模和预算推荐引擎
  • 通过锁定版本并填充文档提供可操作的开发起点
SKILL.md
.github/skills/setup-engineView on GitHub ↗
---
name: setup-engine
description: "配置项目的游戏引擎和版本。将引擎锁定到 CLAUDE.md 中,检测知识缺口,当版本超出 LLM 训练数据时通过 WebSearch 填充引擎参考文档。"
argument-hint: "[engine version] or no args for guided selection"
user-invocable: true
allowed-tools: Read, Glob, Grep, Write, Edit, WebSearch, WebFetch, Task
---

当此技能被调用时:

## 1. 解析参数

三种模式:

- **完整规格**:`/setup-engine godot 4.6` — 已提供引擎和版本
- **仅引擎**:`/setup-engine unity` — 已提供引擎,版本将自动查找
- **无参数**:`/setup-engine` — 完全引导模式(引擎推荐 + 版本选择)

---

## 2. 引导模式(无参数)

如果未指定引擎,运行交互式引擎选择流程:

### 检查现有游戏概念
- 如果存在,读取 `design/gdd/game-concept.md` — 提取游戏类型、范围、目标平台、美术风格、团队规模,以及 `/brainstorm` 给出的引擎推荐
- 如果概念不存在,告知用户:
  > "未找到游戏概念。建议先运行 `/brainstorm` 发现你想构建什么 — 它还会推荐引擎。或者告诉我你的游戏想法,我可以帮你选择。"

### 如果用户想在无概念的情况下选择,询问:
1. **什么类型的游戏?**(2D、3D,或两者兼具?)
2. **什么平台?**(PC、移动端、主机、网页?)
3. **团队规模和经验?**(单人新手、单人经验丰富、小团队?)
4. **有强烈的语言偏好吗?**(GDScript、C#、C++、可视化脚本?)
5. **引擎授权预算?**(仅免费,还是可接受商业授权?)

### 给出推荐

使用以下决策矩阵:

| 因素 | Godot 4 | Unity | Unreal Engine 5 |
|------|---------|-------|-----------------|
| **最适用于** | 2D 游戏、小型 3D、单人/小团队 | 移动端、中等规模 3D、跨平台 | 3A 级 3D、照片级写实、大型团队 |
| **语言** | GDScript(+ C#,通过扩展支持 C++) | C# | C++ / Blueprint |
| **费用** | 免费,MIT 许可证 | 收入门槛以下免费 | 收入门槛以下免费,5% 版税 |
| **学习曲线** | 平缓 | 中等 | 陡峭 |
| **2D 支持** | 优秀(原生) | 良好(但以 3D 为优先) | 可行但非理想选择 |
| **3D 质量上限** | 良好(快速提升中) | 非常好 | 业界领先 |
| **Web 导出** | 支持(原生) | 支持(有限制) | 不支持 |
| **主机导出** | 通过第三方 | 支持(需要授权) | 支持 |
| **开源** | 是 | 否 | 源码可用 |

给出排名前 1-2 的推荐及其与用户回答相关联的理由。
让用户自行选择 — 永远不要强制推荐。

---

## 3. 查找当前版本

引擎确定后:

- 如果提供了版本,直接使用
- 如果未提供版本,使用 WebSearch 查找最新稳定版:
  - 搜索:`"[engine] latest stable version [当前年份]"`
  - 与用户确认:"最新稳定版 [引擎] 是 [版本]。使用这个吗?"

---

## 4. 更新 CLAUDE.md 技术栈

读取 `CLAUDE.md` 并更新技术栈部分。将 `[CHOOSE]` 占位符替换为实际值:

**Godot:**
```markdown
- **引擎**:Godot [版本]
- **语言**:GDScript(主要),通过 GDExtension 支持 C++(性能关键场景)
- **构建系统**:SCons(引擎),Godot 导出模板
- **资产管线**:Godot 导入系统 + 自定义资源管线
```

**Unity:**
```markdown
- **引擎**:Unity [版本]
- **语言**:C#
- **构建系统**:Unity Build Pipeline
- **资产管线**:Unity Asset Import Pipeline + Addressables
```

**Unreal:**
```markdown
- **引擎**:Unreal Engine [版本]
- **语言**:C++(主要),Blueprint(游戏玩法原型开发)
- **构建系统**:Unreal Build Tool (UBT)
- **资产管线**:Unreal Content Pipeline
```

---

## 5. 填充技术偏好

更新 CLAUDE.md 后,创建或更新 `.claude/docs/technical-preferences.md`,填入引擎对应的默认值。先阅读现有模板,然后填入:

### 引擎和语言部分
- 根据第 4 步的引擎选择填入

### 命名约定(引擎默认值)

**Godot (GDScript):**
- 类名:PascalCase(如 `PlayerController`)
- 变量/函数:snake_case(如 `move_speed`)
- 信号:snake_case 过去时(如 `health_changed`)
- 文件名:snake_case 与类名匹配(如 `player_controller.gd`)
- 场景:PascalCase 与根节点匹配(如 `PlayerController.tscn`)
- 常量:UPPER_SNAKE_CASE(如 `MAX_HEALTH`)

**Unity (C#):**
- 类名:PascalCase(如 `PlayerController`)
- 公共字段/属性:PascalCase(如 `MoveSpeed`)
- 私有字段:_camelCase(如 `_moveSpeed`)
- 方法:PascalCase(如 `TakeDamage()`)
- 文件名:PascalCase 与类名匹配(如 `PlayerController.cs`)
- 常量:PascalCase 或 UPPER_SNAKE_CASE

**Unreal (C++):**
- 类名:带前缀的 PascalCase(`A` 表示 Actor,`U` 表示 UObject,`F` 表示结构体)
- 变量:PascalCase(如 `MoveSpeed`)
- 函数:PascalCase(如 `TakeDamage()`)
- 布尔值:`b` 前缀(如 `bIsAlive`)
- 文件名:与类名匹配但不带前缀(如 `PlayerController.h`)

### 其余部分
- 性能预算:保留为 `[TO BE CONFIGURED]` 并附带建议:
  > "典型目标:60fps / 16.6ms 帧预算。现在设置这些吗?"
- 测试:建议引擎对应的框架(Godot 用 GUT,Unity 用 NUnit 等)
- 禁止模式/允许的库:保留为占位符

### 协作步骤
向用户展示填好的偏好设置:
> "这是 [引擎] 的默认技术偏好。要自定义其中任何一项,还是直接保存默认值?"

等待用户批准后再写入文件。

---

## 6. 确定知识缺口

检查引擎版本是否可能超出 LLM 的训练数据。

**已知的大致覆盖范围**(随着模型更新调整):
- LLM 知识截止日期:**2025 年 5 月**
- Godot:训练数据可能覆盖到 ~4.3
- Unity:训练数据可能覆盖到 ~2023.x / 6000.x 早期版本
- Unreal:训练数据可能覆盖到 ~5.3 / 5.4 早期版本

将用户选择的版本与这些基线进行比较:

- **在训练数据范围内** → `低风险` — 参考文档可选但推荐
- **接近边界** → `中风险` — 推荐参考文档
- **超出训练数据** → `高风险` — 必须有参考文档

告知用户所属的类别及原因。

---

## 7. 填充引擎参考文档

### 如果在训练数据范围内(低风险):

创建一个精简的 `docs/engine-reference/<engine>/VERSION.md`:

```markdown
# [Engine] — 版本参考

| 字段 | 值 |
|------|-----|
| **引擎版本** | [版本] |
| **项目锁定日期** | [今天的日期] |
| **LLM 知识截止** | 2025 年 5 月 |
| **风险等级** | 低 — 版本在 LLM 训练数据范围内 |

## 说明

此引擎版本在 LLM 的训练数据范围内。引擎参考文档为可选项,
但如果代理建议了错误的 API,可稍后添加。

随时运行 `/setup-engine refresh` 来填充完整参考文档。
```

不要创建 breaking-changes.md、deprecated-apis.md 等文件 — 它们会增加上下文成本但价值有限。

### 如果超出训练数据(中风险或高风险):

通过搜索网络创建完整的参考文档集:

1. **搜索官方迁移/升级指南**:
   - `"[engine] [旧版本] 到 [新版本] 迁移指南"`
   - `"[engine] [版本] breaking changes"`
   - `"[engine] [版本] changelog"`
   - `"[engine] [版本] deprecated API"`

2. **从官方文档获取并提取**:
   - 从知识截止到当前版本之间的每个版本的 breaking changes
   - 已废弃的 API 及其替代方案
   - 新功能和最佳实践

3. **创建完整的参考目录**:
   ```
   docs/engine-reference/<engine>/
   ├── VERSION.md              # 版本锁定 + 知识缺口分析
   ├── breaking-changes.md     # 逐版本的 breaking changes
   ├── deprecated-apis.md      # "不要用 X → 用 Y" 对照表
   ├── current-best-practices.md  # 知识截止后的新实践
   └── modules/                # 各子系统参考(按需创建)
   ```

4. **使用网络搜索的真实数据填充每个文件**,遵循现有参考文档的格式。每个文件必须有"最后验证:[日期]"标题。

5. **对于模块文件**:仅对发生了重大变化的子系统创建模块。不要创建空白或内容稀少的模块文件。

---

## 8. 更新 CLAUDE.md 导入

更新"引擎版本参考"下的 `@` 导入,指向正确的引擎:

```markdown
## 引擎版本参考

@docs/engine-reference/<engine>/VERSION.md
```

如果之前的导入指向不同引擎(例如从 Godot 切换到 Unity),请更新。

---

## 9. 更新 Agent 指令

对于所选引擎的专家代理,验证它们是否有"版本感知"部分。如果没有,按照现有 Godot 专家代理的模式添加。

该部分应指示代理:
1. 读取 `docs/engine-reference/<engine>/VERSION.md`
2. 建议代码前检查已废弃的 API
3. 检查相关版本过渡的 breaking changes
4. 使用 WebSearch 验证不确定的 API

---

## 10. Refresh 子命令

如果以 `/setup-engine refresh` 调用:

1. 读取现有的 `docs/engine-reference/<engine>/VERSION.md` 获取当前引擎和版本
2. 使用 WebSearch 检查:
   - 自上次验证以来的新引擎发布
   - 更新的迁移指南
   - 新废弃的 API
3. 用新发现更新所有参考文档
4. 更新所有修改文件的"最后验证"日期
5. 报告变更内容

---

## 11. 输出摘要

设置完成后,输出:

```
引擎设置完成
=====================
引擎:            [名称] [版本]
知识风险:        [低/中/高]
参考文档:        [已创建/已跳过]
CLAUDE.md:       [已更新]
技术偏好:        [已创建/已更新]
代理配置:        [已验证]

后续步骤:
1. 查看 docs/engine-reference/<engine>/VERSION.md
2. [如果来自 /brainstorm] 运行 /map-systems 将概念分解为独立系统
3. [如果来自 /brainstorm] 运行 /design-system 逐系统编写 GDD(引导式,按章节)
4. [如果来自 /brainstorm] 运行 /prototype [核心机制] 测试核心循环
5. [如果是全新开始] 运行 /brainstorm 发现游戏概念
6. 创建第一个里程碑:/sprint-plan new
```

---

## 护栏

- 绝对不要猜测引擎版本 — 始终通过 WebSearch 或用户确认来验证
- 没有询问前绝不要覆盖现有参考文档 — 应追加或更新
- 如果已有不同引擎的参考文档,替换前先询问
- 始终在编辑 CLAUDE.md 之前向用户展示将要修改的内容
- 如果 WebSearch 返回模糊结果,展示给用户并让其决定
More from pixel-cellar/Claude-Code-Game-Studios