地图导出模块 private
地图导出模块
目标
把 Assets/Maps/EditorScenes 场景转换成客户端与服务端共用的数据:Props、Lightmap、NavMesh、GPE/刷怪点、资源索引和分发包。
工具入口
实现:Assets/Maps/Scripts/MapGather.cs、Assets/Maps/Scripts/MapBaker.cs、Assets/Maps/Scripts/Editor/MapRoot.cs。
Assets/Map/GatherCurrSceneGPE
Assets/Map/GatherSelectionSceneGPE
Assets/Map/GatherAllSceneGPE
Assets/Map/ZipCurrMapData
Assets/Map/ZipSelectedMapData
Assets/Map/ZipAllMapData
Assets/Map/CopyProjectMapDataToServer
推荐 SOP
- 打开 Assets/Maps/EditorScenes 目标场景,确认根节点有 MapRoot。
- 保存场景,运行 Assets/Map/ZipCurrMapData,生成 ../Maps/Data 与 ../Maps/Database。
- 运行 GatherCurrSceneGPE,生成 ../MapGather/GatherMapGpes.xlsx。
- 核对 Props、Lightmap、NavMesh、SpawnPoint 数量。
- 配置项目根目录 MapBakerInfo.txt 第一行为服务端地图目录,再运行复制菜单。
核心代码
[MenuItem("Assets/Map/ZipCurrMapData", false, 1)]
public static void ZipCurrMapDataButton() => ZipCurrMapData();
private static void ZipCurrMapData(bool copyToServer = false)
{
Common.FileUtils.CreateDirectory(pathMapDatas);
Common.FileUtils.CreateDirectory(pathDatabase);
var scene = SceneManager.GetActiveScene();
if (scene == null || string.IsNullOrEmpty(scene.path)) return;
BakeMapsData(new List<string> { Application.dataPath + scene.path }, copyToServer);
}
MapGather 遍历根节点收集 ObjectSpawnPoint 后写 Excel:
var scene = SceneManager.GetActiveScene();
var roots = scene.GetRootGameObjects();
var data = GatherSingleSceneGPE(scene.name, roots);
ExportGatherData(exportFilePath, new[] { data });
光照贴图专项
地图导出只负责携带 Lightmap GUID 和模板属性;完整的 Lightmap 场景、Generate Lighting、LevelLightmap.asset、模板 .bytes 以及运行时加载链路见 光照与 Lightmap 烘焙模块。
输出验收
| 输出 | 用途 | 检查 |
|---|---|---|
| Maps/Data/* | 地图二进制 | 时间与场景修改时间一致 |
| Maps/Database/AssetsMapPath.bytes | 资源索引 | AssetPostprocessor 自动刷新 |
| MapGather/GatherMapGpes.xlsx | 点位汇总 | 行数与场景点位一致 |
| Maps.zip | 分发包 | 解压目录结构不变 |


失败定位
- Current Scene is invalid:场景未保存。
- 找不到服务端目录:MapBakerInfo.txt 路径不存在。
- 贴图变更未更新索引:检查 ObservePropsAndDataFiles._monitorPaths。