Files
cocos/tools/levels-database.md
刘宇飞 d393302388 Complete Cocos Creator port with level bundles, themes, and tooling.
Adds level prefabs, theme assets, audio, extensions, and deployment scripts for the Unity WebGL migration.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 15:30:58 +08:00

2.5 KiB
Raw Permalink Blame History

关卡数据库 levels-database.json

单一数据源

文件 说明
assets/resources/level/levels-database.json 全部关卡(增删查改改这个文件)
assets/scripts/level/LevelDatabase.ts 加载与 CRUD API
assets/scripts/level/LevelRegistry.ts 游戏内统一入口

每条关卡结构与 Unity 一致:

  • spawnsLevels*.cs(运行时由 GameManager 生成 Player/Prop
  • ground / border ← Unity LevelN.prefab Tilemap烘焙进 Cocos 预制体)
  • unityPrefab ← 原 Unity 资源路径(便于对照)

关卡地图编辑面板(对齐 Unity Tile Palette

tools/level-map-editor.md:中间编辑关卡网格,右侧选择 map-tiles/MapTile_* 模块绘制,保存后烘焙预制体。

关卡地图预制体(与 Unity Instantiate 一致)

路径 说明
assets/resources/level-prefabs/Level{N}.prefab 地图视觉 + LevelMapDataGround/Border 子节点)
assets/scripts/level/LevelMapData.ts 挂在预制体根节点,提供可走/阻挡逻辑
tools/bake_cocos_level_prefabs.py levels-database.json 批量生成预制体

运行时 GameManager 只做:

  1. resources.load('level-prefabs/LevelN')instantiate
  2. 从预制体 LevelMapData 读取 ground / border
  3. spawns 生成角色与道具

不再用代码 drawGridDebug 拼地图。

修改 JSON 后需重新烘焙:

python3 tools/bake_cocos_level_prefabs.py \
  --db assets/resources/level/levels-database.json \
  --out-dir assets/resources/level-prefabs

贴图(角色 / 砖块)

从 Unity Assets/Texture 导入:

python3 tools/import_unity_textures.py --unity-root "/path/to/主站"
# Creator 刷新 textures 后:
python3 tools/fix_tile_texture_metas.py

目录与主题:textures/defaultsiluchineseredArmynumMansnowsanxing

从 Unity 重新导出

cd /path/to/cocos/tfrh001
python3 tools/export_all_levels.py \
  --unity-root "/path/to/主站" \
  --output assets/resources/level/levels-database.json

调试可加 --limit 50 只导出前 50 关。

增删查改示例(代码)

import { getLevelConfig, setLevel, removeLevel, addLevel, getLevelIds } from './level/LevelRegistry';

const cfg = getLevelConfig(3);
setLevel({ ...cfg!, levelID: 99, spawns: [...] });
removeLevel(99);
console.log(getLevelIds());

直接编辑 JSON 后,在 Cocos 中刷新资源并重新预览即可。