地图导出模块 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

  1. 打开 Assets/Maps/EditorScenes 目标场景,确认根节点有 MapRoot。
  2. 保存场景,运行 Assets/Map/ZipCurrMapData,生成 ../Maps/Data 与 ../Maps/Database。
  3. 运行 GatherCurrSceneGPE,生成 ../MapGather/GatherMapGpes.xlsx。
  4. 核对 Props、Lightmap、NavMesh、SpawnPoint 数量。
  5. 配置项目根目录 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分发包解压目录结构不变

地图编辑器实景

MapRoot 场景视图

失败定位

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