关卡生成流水线

这个仓库包含一套从 Excel 数据自动生成 Unity Prefab 与 C# 关卡字典的脚本。核心流程由 run_pipeline.py 串联完成。

环境准备

  • Python 3.9 及以上(在 Windows PowerShell 上测试)
  • Excel 源文件(默认 global.xlsx)并符合既定的表格结构
  • 依赖库:pandasopenpyxl

安装依赖:

python -m pip install pandas openpyxl

快速上手

  1. 将 Excel 文件(如 global.xlsx)与脚本放在同一目录。
  2. 确认模板 Prefab默认 Level80317.prefab)存在。
  3. 在 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 文件

三个步骤详解

  • 步骤 1read_excel.py

    • 自动补齐 Excel 第一列空白的地图号(从 --start-i 指定的值起)。
    • 在 B~AA 列扫描“币”、“p”、“v”等标记提取坐标并输出成 found_币.xlsxfound_p.xlsxfound_v.xlsx
    • 识别颜色填充的格子,将绿色写入 found_方块.xlsx,蓝色/橙色/粉色分别写入 found_water.xlsxfound_wall.xlsxfound_jump.xlsx
  • 步骤 2write_code.py

    • 读取步骤一输出的多张 Excel按地图号分组。
    • 生成 Spawn 配置,写入 generated_levels.cs。可在命令行通过 --output-levels 指定输出文件名。
  • 步骤 3make_prefab.py

    • 以模板 Prefab 为基础,逐个地图替换 GroundBorderm_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_termsuffixes:用于识别不同物件符号,扩展至新标记时修改此处。
    • Excel 列段 grid_columns(默认 B~AA若表格布局变化或列数扩展需同步调整。
  • write_code.py
    • FILE_P / FILE_V / FILE_COIN:输入文件名常量,可在命令行前覆盖或直接修改常量。
    • LEVEL_PATHPrefab 在 Unity 项目的目标路径模板,适配其他资源组织结构时更新。
    • generate_spawn_line() 内的 pathdirection_map:指定生成的 Prefab 引用与方向映射,新角色或朝向枚举需在此扩展。
    • boundary 默认值与 Spawn 字段列表:若未来关卡数据结构变化,应相应调整模板字符串。
  • make_prefab.py
    • 顶部 EXCEL_PATHTEMPLATE_PREFABOUTPUT_DIR分别控制输入表格、Prefab 模板和输出目录。
    • TILE_LINE 模板中的 m_TileIndex / m_TileSpriteIndex:当新的 TileAsset/Sprite 索引出现时需同步修改。
    • replace_tilemap_by_gameobject_name() 查找的 GameObject 名称(默认 GroundBorder):若模板结构不同,调整调用处的名称。
    • 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,3all)。
  • --output-levels: 生成的 C# 文件名。

常见问题

  • 提示缺少某个库:再次执行依赖安装命令。
  • 没有生成 Prefab:确认 found_方块.xlsx 存在且列名与脚本对应;模板 Prefab 名称无误。
  • Tile 未正确替换:检查模板中 GroundBorder 的 GameObject 名称以及 m_Tiles 的结构是否发生变化。

更多命令行参数说明可执行:

python .\run_pipeline.py --help
Description
No description provided
Readme 521 KiB
Languages
C# 61.9%
Python 38.1%