80afbfd3475ff67851eab3edc85b691ea423cf2f
关卡生成流水线
这个仓库包含一套从 Excel 数据自动生成 Unity Prefab 与 C# 关卡字典的脚本。核心流程由 run_pipeline.py 串联完成。
环境准备
- Python 3.9 及以上(在 Windows PowerShell 上测试)
- Excel 源文件(默认
global.xlsx)并符合既定的表格结构 - 依赖库:
pandas、openpyxl
安装依赖:
python -m pip install pandas openpyxl
快速上手
- 将 Excel 文件(如
global.xlsx)与脚本放在同一目录。 - 确认模板 Prefab(默认
Level80317.prefab)存在。 - 在 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。
- 自动补齐 Excel 第一列空白的地图号(从
-
步骤 2(
write_code.py):- 读取步骤一输出的多张 Excel,按地图号分组。
- 生成
Spawn配置,写入generated_levels.cs。可在命令行通过--output-levels指定输出文件名。
-
步骤 3(
make_prefab.py):- 以模板 Prefab 为基础,逐个地图替换
Ground、Border的m_Tiles块。 - 若无对应坐标,自动写成
m_Tiles: {}。 - Prefab 输出到
GeneratedPrefabs/目录。
- 以模板 Prefab 为基础,逐个地图替换
脚本内可调参数
read_excel.pycolumns_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.pyFILE_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的结构是否发生变化。
更多命令行参数说明可执行:
python .\run_pipeline.py --help
Description
Languages
C#
61.9%
Python
38.1%