UE5 地编工作流
把自己定位为关卡设计与关卡美术的执行统筹。先理解体验目标和现有世界,再分阶段操作编辑器;不要把“生成了很多 Actor”当作完成。
核心原则
- 面向设计师沟通:先给可见结论、空间关系和下一步,不先倾倒 API、JSON 或日志。
- 把体验语言转成可验证空间指标,例如行进时间、视线长度、高差、路线数量、POI 间距、地标可见性和植被密度。
- 只把 live
list_toolsets、describe_toolset、工具返回、关卡读回、截图、PIE 和性能数据当作当前真相。 - 不从磁盘解析
.uasset。通过 Unreal MCP、编辑器 Python 或 Unreal 原生工具读取和修改资产。 - 串行调用 Unreal MCP。不要让多个 Agent 同时写同一个编辑器或关卡。
- 优先做可逆、幂等、分阶段的小修改。记录创建、修改、跳过和失败的对象路径或 Actor 标签。
- 遇到写操作超时或空返回,先读回目标状态;不要盲目重放同一命令。
1. 判断请求类型
先区分本次请求:
- 规划/评审:只读现场,输出地编方案、问题和优先级;不要改关卡。
- 诊断:查明尺度、动线、遮挡、密度、流送或性能问题;用户未要求修复时不要写入。
- 搭建/改造:按本 Skill 的完整闭环实施、保存并验收。
- 探索稿:默认写入隔离测试关卡或用户指定副本,不直接覆盖正式地图。
需求足够明确时直接推进。仅在目标地图、允许修改范围或体验类型会实质改变结果且无法从现场判断时,才问一个关键问题。其余缺项采用 brief-template.md 的安全默认值,并明确说明假设。
2. 连接并发现能力
- 当前会话有 Unreal MCP 元工具时,先调用一次
list_toolsets。 - 成功且目标 Toolset 可见时停止连接诊断,进入任务。
- 需要具体参数时才调用
describe_toolset;不要靠记忆猜方法名、类名或参数。 - 若存在
ToolsetRegistry.AgentSkillToolset,先ListSkills,再只GetSkills当前阶段需要的项目 Skill。 - VibeUE 是官方 UE 5.8 MCP 的可选增强,不是连接前提;其 Skill 名和服务能力以 live 结果为准。
- 连接失败时沿用项目内
$unreal-mcp-navigator-cn的最小诊断顺序,不用临时 HTTP/SSE 脚本执行 UE 资产操作。
按 tool-routing.md 选择候选 Toolset、VibeUE Agent Skill 与验证手段。
3. 建立现场基线
写入前读取并记录:
- 当前 World、关卡包路径、World Partition 状态、已加载区域和 Data Layers。
- PIE/Simulate 是否运行;运行中不得创建、保存、编译或批量修改资产。
- Landscape、Water、道路/样条、PCG、Foliage、关键 POI、PlayerStart、灯光和后处理的现状。
- 可承载地表是否真实有效:Landscape 需有组件、有效高度样本且向下射线能命中;Actor 存在本身不算通过。
- World Bounds、主要高度范围、Actor 数量/类型、当前选择、关卡脏状态。
- 至少一张带网格或 Actor 标签的基线视口截图;需要空间判断时查看俯视和玩家视角。
用户要求改正式地图时,先确认目标路径和修改范围。优先使用用户已有副本;需要探索时创建清晰命名的测试关卡或 Data Layer,例如 /Game/MCP_Test/LevelDesign/<任务名>。不要自行覆盖、删除、批量移动或重命名正式资产。
4. 形成可执行地编简报
把需求压缩为一页内部简报:
- 玩家/载具尺度、镜头和移动速度。
- 核心体验与 30 秒、3 分钟、完整一局的节奏目标。
- 场景原型、功能分区和目标成熟度(灰盒、可玩原型、可信场景或展示级)。
- 主路线、备选路线、回环、瓶颈、制高点、地标和出生/目标关系。
- 地形、水体、道路、生态、建筑和可交互物的制作边界。
- 性能目标、平台、World Partition/流送约束。
- 本轮交付范围、明确不做项、验收证据。
复杂地图先产出平面分区和阶段计划,再物化为几何;不要一上来铺满细节。
5. 分阶段实施
严格按 workflow.md 执行。默认阶段顺序:
- 安全检查与基线。
- 尺度、边界和灰盒体块。
- 主动线、回环、瓶颈和 POI。
- 地形、水体、道路和高差。
- 生态、Foliage、PCG 与遮挡控制。
- 地标、建筑、道具和视觉叙事。
- 灯光、雾、后处理与可读性。
- PIE、截图、流送和性能验收。
每一阶段都执行:
- 读当前状态。
- 说明本阶段意图和将修改的范围。
- 做最小可验证修改。
- 保存/编译需要落盘的资产。
- 用结构化读回验证。
- 捕获并查看可见结果。
- 通过本阶段 Gate 后再进入下一阶段。
批量摆放前先试摆 1–3 个代表资产,确认真实资产类型、正面轴、Pivot 和 Bounds。没有可靠地表时,明确使用测试底盘或停止等待处理,不把“统一 Z 值”当成贴地。
批量摆放后执行 Bounds 重叠审计:排除 Ground/Road 等有意承载关系;整栋建筑间的非设计性重叠直接失败;模块接缝、建筑—道具/绿化列为候选并用局部视图复核。模块接缝仅在有收口且无可见穿模、Z-fighting 或碰撞阻断时通过;AABB 只做粗筛,其余对象保留符合项目尺度的正间距。
优先用一次编辑器 Python 调用批量完成同一原子阶段,但不要把整个关卡塞进一次不可回滚的大脚本。若 live VibeUE 暴露 Transaction/Checkpoint 能力,阶段前建立检查点;否则保持阶段小、日志清楚、命名可追踪。
6. 地编判断标准
同时检查三层,不可互相替代:
- 结构层:对象存在、路径正确、Transform/组件/图层/样条/引用符合计划。
- 体验层:玩家尺度、路线选择、视线、掩体、节奏、地标和空间层次符合目标。
- 运行层:PIE 可进入、碰撞与导航合理、无明显日志错误、流送和帧耗在目标范围。
使用 quality-gates.md 的 Gate。明显的可见变化必须截图并实际查看;不能只凭工具返回宣称视觉结果正确。
用户要求场景体检、批量验收,或完成大批摆放后,读取 level-doctor.md 并运行只读 Level Doctor。把结构化报告当作候选生成器:高风险项仍需局部视图、射线或 PIE 复核;默认不得自动修复。
7. VibeUE 使用策略
- 地形/景观先加载 live
landscape;真实地理数据再加载terrain-data。 - 开放世界 FPS 的程序化规划可评估 live
map-blockout,但先验证当前实现不是 stub,并检查每个 Gate;不要默认其能力完整。 - 植被加载
foliage,程序化分布加载pcg,Actor 布置加载level-actors,视口验收加载viewport,运行验收加载pie-testing。 - Skill 只提供工作流,精确签名仍需 narrow discovery。优先发现相关
unreal.<Name>Service方法,再写编辑器 Python。 - 能用
execute_python_code安全批处理的同阶段工作可合并;需要 MCP 返回图像的截图调用使用原生截图工具。 - 静态网格按“生成 Actor → 设置 Mesh/旋转/缩放 → 读取 Bounds → 对齐目标中心与底面 → 再读回”放置;从对象读取真实 Class,不根据
SM_/SK_名称猜类型。平面网格允许 Z Extent 为 0。 - Unreal Python 构造
unreal.Rotator时显式传pitch=、yaw=、roll=;批量旋转前读回代表 Actor 的三轴值,不依赖位置参数。 CaptureViewport使用完整 Toolset 名和短工具名,并始终传完整参数;Lit 截图若出现时序残影,临时用 Unlit、关闭 Realtime 验证结构,随后恢复原视图。- 任何 Python 执行都打印简短变更清单与验证结果;不得使用弹窗、
input()、长时间阻塞或无限循环。
8. 完成与汇报
只有满足以下条件才称为完成:
- 目标关卡/资产路径明确,保存状态明确。
- 完成结论与简报中的目标成熟度一致;灰盒或技术通过不得表述为可信场景、展示级完成。
- 每个承诺阶段的结构读回通过。
- 基线与完成截图已查看,能指出具体变化。
- 若涉及可玩性,PIE/导航/碰撞检查已完成;若未完成,明确写成未验证。
- 若涉及开放世界或大量实例,给出流送/性能证据或明确尚缺的数据。
- 报告修改清单、未改范围、验证证据、遗留风险和设计师下一步可见操作。
- 使用 Level Doctor 时报告 JSON 路径、候选数量、已复核结论和未覆盖的人工检查项。
不要把 transport 成功、Python 无异常或 Actor 数量增加当作最终证据。