81 lines
4.6 KiB
Markdown
81 lines
4.6 KiB
Markdown
# 关卡生成流水线
|
||
|
||
这个仓库包含一套从 Excel 数据自动生成 Unity Prefab 与 C# 关卡字典的脚本。核心流程由 `run_pipeline.py` 串联完成。
|
||
|
||
## 环境准备
|
||
- Python 3.9 及以上(在 Windows PowerShell 上测试)
|
||
- Excel 源文件(默认 `global.xlsx`)并符合既定的表格结构
|
||
- 依赖库:`pandas`、`openpyxl`
|
||
|
||
安装依赖:
|
||
```powershell
|
||
python -m pip install pandas openpyxl
|
||
```
|
||
|
||
## 快速上手
|
||
1. 将 Excel 文件(如 `global.xlsx`)与脚本放在同一目录。
|
||
2. 确认模板 Prefab(默认 `Level80317.prefab`)存在。
|
||
3. 在 PowerShell 中运行:
|
||
```powershell
|
||
python .\run_pipeline.py --excel global.xlsx --sheet Sheet2 --start-i 80316
|
||
```
|
||
若不传 `--steps`,脚本会依次执行全部三步(抽取数据 → 生成 C# → 生成 Prefab)。
|
||
可通过 `--steps 1,2` 指定只运行前两步。
|
||
|
||
### 输出文件
|
||
- `found_*.xlsx`:步骤一扫描得到的坐标数据
|
||
- `generated_levels.cs`:步骤二生成的关卡字典代码
|
||
- `GeneratedPrefabs/LevelXXXX.prefab`:步骤三输出的 Prefab 文件
|
||
|
||
## 三个步骤详解
|
||
- **步骤 1(`read_excel.py`)**:
|
||
- 自动补齐 Excel 第一列空白的地图号(从 `--start-i` 指定的值起)。
|
||
- 在 B~AA 列扫描“币”、“p”、“v”等标记,提取坐标并输出成 `found_币.xlsx`、`found_p.xlsx`、`found_v.xlsx`。
|
||
- 识别颜色填充的格子,将绿色写入 `found_方块.xlsx`,蓝色/橙色/粉色分别写入 `found_water.xlsx`、`found_wall.xlsx`、`found_jump.xlsx`。
|
||
|
||
- **步骤 2(`write_code.py`)**:
|
||
- 读取步骤一输出的多张 Excel,按地图号分组。
|
||
- 生成 `Spawn` 配置,写入 `generated_levels.cs`。可在命令行通过 `--output-levels` 指定输出文件名。
|
||
|
||
- **步骤 3(`make_prefab.py`)**:
|
||
- 以模板 Prefab 为基础,逐个地图替换 `Ground`、`Border` 的 `m_Tiles` 块。
|
||
- 若无对应坐标,自动写成 `m_Tiles: {}`。
|
||
- Prefab 输出到 `GeneratedPrefabs/` 目录。
|
||
|
||
## 脚本内可调参数
|
||
- **`read_excel.py`**
|
||
- `columns_to_preview`:控制调试输出中预览的列数,必要时减少日志噪音。
|
||
- `GREEN_COLORS` / `BLUE_COLORS` / `ORANGE_COLORS` / `PINK_COLORS`:决定颜色识别的十六进制值,适配其他调色方案时需更新。
|
||
- `find_cells_with_currency_xlsx()` 的 `search_term` 及 `suffixes`:用于识别不同物件符号,扩展至新标记时修改此处。
|
||
- Excel 列段 `grid_columns`(默认 B~AA):若表格布局变化或列数扩展需同步调整。
|
||
- **`write_code.py`**
|
||
- `FILE_P` / `FILE_V` / `FILE_COIN`:输入文件名常量,可在命令行前覆盖或直接修改常量。
|
||
- `LEVEL_PATH`:Prefab 在 Unity 项目的目标路径模板,适配其他资源组织结构时更新。
|
||
- `generate_spawn_line()` 内的 `path` 与 `direction_map`:指定生成的 Prefab 引用与方向映射,新角色或朝向枚举需在此扩展。
|
||
- `boundary` 默认值与 `Spawn` 字段列表:若未来关卡数据结构变化,应相应调整模板字符串。
|
||
- **`make_prefab.py`**
|
||
- 顶部 `EXCEL_PATH`、`TEMPLATE_PREFAB`、`OUTPUT_DIR`:分别控制输入表格、Prefab 模板和输出目录。
|
||
- `TILE_LINE` 模板中的 `m_TileIndex` / `m_TileSpriteIndex`:当新的 TileAsset/Sprite 索引出现时需同步修改。
|
||
- `replace_tilemap_by_gameobject_name()` 查找的 GameObject 名称(默认 `Ground`、`Border`):若模板结构不同,调整调用处的名称。
|
||
- Border 层 `tile_index` 分配:当前约定 water=2、wall=0、jump=1,结合实际 Tilemap 资源可重新定义。
|
||
|
||
> **适配新任务**:如果未来 Excel 的 sheet 名称、列布局或颜色含义有变化,请同步更新上述常量/映射,必要时扩展 `read_excel.py` 对应的字段重命名逻辑(`df.rename(...)`)。Prefab 模板层级或 Tilemap 名称变更时,也需更新 `make_prefab.py` 中的搜索关键字与 Tile 生成规则。
|
||
|
||
## 常用参数
|
||
- `--excel`: Excel 文件名。
|
||
- `--sheet`: Sheet 名称。
|
||
- `--start-i`: 填补地图号的起始值。
|
||
- `--template`: Prefab 模板路径。
|
||
- `--steps`: 需要执行的步骤序号(例如 `1,3` 或 `all`)。
|
||
- `--output-levels`: 生成的 C# 文件名。
|
||
|
||
## 常见问题
|
||
- **提示缺少某个库**:再次执行依赖安装命令。
|
||
- **没有生成 Prefab**:确认 `found_方块.xlsx` 存在且列名与脚本对应;模板 Prefab 名称无误。
|
||
- **Tile 未正确替换**:检查模板中 `Ground`、`Border` 的 GameObject 名称以及 `m_Tiles` 的结构是否发生变化。
|
||
|
||
更多命令行参数说明可执行:
|
||
```powershell
|
||
python .\run_pipeline.py --help
|
||
```
|