透明建筑模块逐步拼成一座城市很容易让人觉得城市编辑器已经成立。但对普通用户和独立开发者来说真正需要验证的不是“建筑能不能出现”而是能否稳定完成一条编辑闭环选择模块 → 预览与旋转 → 网格吸附 → 正式提交 → 撤销或重做 → 保存 → 关闭后重新打开。其中任何一步缺少可追踪状态编辑结果都可能只停留在视觉演示层面。例如建筑看似已经放下后台却创建了两个实例撤销后模型消失了占用格和碰撞仍然存在保存后画面能恢复模块身份和操作历史却全部丢失。本文不把概念画面当作功能证据而是设计一套可执行的验收方案。固定测试范围为16个建筑模块、1块8×8网格地块、3种高度层和10分钟编辑时限。由于当前只有模块逐步组合成城市的概念图涉及真实运行的结论统一标记为“待验证”。图注透明建筑模块由零散部件逐步组合成城市可以说明模块化城市生成与编辑的视觉方向模块选择、吸附、撤销、保存和回读仍需真实操作记录。先分清四档证据建筑出现不等于编辑器可用城市编辑器的证据可以分为四档概念海报只能证明模块组合和城市形态的设想拖拽或拼装动画只能证明视觉流程被表现出来单次摆放可以证明部分输入与放置逻辑可能已接通完整回读保存、关闭、重新打开后仍能恢复一致状态才接近可用的编辑器。后续六个节点都应保留操作记录和状态变化。仅凭最终画面无法判断建筑是正式实例、临时预览还是一段预先制作好的动画。节点一模板、预览对象和场景实例是否唯一典型问题放置一次后台却出现两个实例城市编辑器首先要回答“用户正在编辑什么”。目录中的建筑模板、鼠标下的半透明预览和场景中已提交的建筑不应是同一个对象。将16个目录模板命名为building_01至building_16。用户选择模板时只更新当前选择不立即修改场景。进入预览后创建临时对象只有点击确认系统才生成拥有唯一instance_id的正式实例。每次编辑还应拥有独立的edit_session_id用于区分不同编辑过程。用户连续点击同一个模板时系统可以按设计创建多个合法实例也可以明确拦截重复请求但不能出现画面只放置一次、实例列表却增加两次的情况。建议记录edit_session_id selected_module_id preview_id instance_id instance_count session_state通过标准模板、预览对象和正式实例身份清楚目录模板不会因放置而消失每个正式实例都能被单独选择、删除和追踪。当前状态待验证。概念图只能展示模块组合不能证明实例身份已经建立。节点二预览、旋转与正式提交是否分离典型问题取消预览后场景仍留下透明残影用户拖动建筑时看到的半透明模型应当只是预览对象。它可以跟随鼠标或触控移动显示占地范围、朝向和高度层但不应提前写入存档也不应参与正式碰撞和导航。预览阶段只修改preview_state包括临时位置、旋转角度和高度层。点击确认后系统生成唯一的placement_event_id再将预览数据转换为正式实例。点击取消时预览对象、临时占位和相关监听器都应被清理。重点测试四类输入快速连续点击确认确认后立即点击取消窗口或输入设备中途失去焦点连续旋转多次后再提交。可以使用一个最小操作验证选择building_03拖入网格旋转90°切换到第二高度层再点击确认。随后核对场景实例、保存数据和操作历史是否都只增加一次。通过标准预览状态与正式状态完全分离取消不留下实例、碰撞或历史记录一次确认只创建一个放置事件。当前状态待验证。现有素材没有展示预览、提交或取消过程。节点三网格、枢轴和高度层是否使用同一套坐标规则典型问题模型看着对齐数据却已经错了一格网格吸附是把用户拖到任意位置的模块对齐到固定网格坐标。问题通常不在“有没有吸附动画”而在所有模块是否使用同一套原点、格子尺寸和吸附基准。8×8地块应定义唯一的grid_origin、cell_size和layer_height。每个模块还要明确吸附点使用对象枢轴、底部接口还是占地范围的某个角点。不能让小模块按中心吸附长条模块却按墙角吸附否则相邻建筑很容易留下缝隙或发生重叠。至少测试三类对象普通小模块、占用多个格子的长条模块以及旋转90°后的同一模块。再将它们分别放到三种高度层记录raw_position snapped_position pivot_mode footprint rotation layer_id透明材质还会带来视觉误判。用户看到的玻璃轮廓可能没有覆盖某个格子但真正决定能否放置的应是预先定义的占地范围而不是屏幕上的透明边缘。通过标准相邻模块接口一致旋转后占地范围同步变化三种高度层没有隐式偏移同一模块在相同条件下重复放置结果完全一致。当前状态待验证。当前图片不能证明网格吸附、枢轴和高度层数据正确。节点四越界、重叠与删除是否同步处理典型问题位置已经变红用户仍然可以提交模块能够被拖到地块上不代表当前位置合法。系统至少要判断四类限制是否超出8×8地块边界是否占用其他实例的格子是否堵住项目规定的必要入口当前高度层是否支持该模块。非法位置要给出具体原因例如“超出地块范围”“与building_05重叠”或“该模块不支持第二高度层”。只把预览变成红色却仍允许创建实例不能算完成校验。非法操作不得生成instance_id也不能写入撤销历史和保存数据。删除正式实例时则应生成唯一的delete_event_id并同步清理场景对象、占用格、碰撞、导航以及存档记录。不要只把被删除的模型隐藏起来。否则当前画面虽然空了重新打开布局时旧建筑仍可能出现导航系统也可能继续把该位置当作障碍。通过标准越界、重叠、入口堵塞和高度不支持都有明确反馈非法操作不改变正式状态删除后视觉、占用、碰撞、导航和保存数据保持一致。当前状态待验证。静态图无法证明非法位置会被拦截也无法证明删除操作会同步清理状态。节点五撤销与重做是否恢复完整操作状态典型问题模型回来了占用格却没有恢复撤销不是把上一个模型简单移回原位而是恢复一次操作前的完整状态。可以固定测试以下操作链放置A → 旋转B → 删除A → 撤销3次 → 重做3次。每一步记录command_id、command_type、state_before和state_after。正确顺序应为第一次撤销恢复被删除的A第二次撤销恢复B旋转前的状态第三次撤销移除最初放置的A重做按相反顺序重新执行这3项操作。一次命令的完整状态至少应包含位置、旋转、高度层、材质参数、占用格、碰撞和保存记录。常见错误是视觉模型恢复了占用格或导航仍停留在撤销前也可能位置恢复了材质参数和高度层却没有恢复。还要测试撤销栈隔离。新建城市后不能继续撤销旧城市的操作重新打开已保存城市时是否保留撤销历史应由产品规则明确规定不能随机变化。通过标准撤销和重做严格按照操作顺序恢复完整实例状态视觉、碰撞、导航、占用格和保存数据保持一致。当前状态待验证。当前素材没有提供撤销、重做或命令历史证据。节点六保存、回读与新建城市是否彼此隔离典型问题重开后建筑还在但已经无法继续编辑编辑器是否真正可用最终要看关闭后能否恢复。保存时至少需要记录layout_id module_version instance_list instance_transform grid_state layer_state建议进行一次完整生命周期测试在10分钟内放置若干模块覆盖三种高度层保存布局并关闭编辑器重新打开相同layout_id核对目录模板、已放置实例、空闲格、占用格和高度层状态。重新打开后不仅要看建筑是否仍在还要检查实例身份、旋转角度、碰撞范围、导航占用以及编辑能力是否恢复。只恢复一张类似截图的画面不能证明编辑状态已经回读。随后创建一座新城市确认系统生成新的layout_id。新城市不能继承旧布局的实例、占用格和撤销栈返回旧布局继续编辑时也不能重复创建已经存在的实例。如果需要先准备建筑和城市空间草稿可以使用世界模型建立视觉起点。但城市草稿不能证明模块编辑、命令历史和保存回读已经实现这些能力仍需在真实工程中验证。通过标准同一layout_id重开后恢复一致新城市与旧布局完全隔离保存、回读和继续编辑不会产生重复实例也不会丢失必要状态。当前状态待验证。当前素材没有保存文件、重开过程或数据回读记录。三轮实测从正常放置测到生命周期第一轮正常搭建放置8个模块覆盖三种高度层测试旋转和网格吸附。保存后重新打开核对模块数量、实例身份、占用格和回读结果。第二轮异常输入连续快速确认、拖到地块外、制造重叠、取消预览再连续执行撤销与重做。每项异常都要记录界面反馈、场景变化、历史变化和保存数据变化。第三轮生命周期在保存过程中退出重新打开后继续编辑随后新建城市再返回旧布局。重点检查是否出现旧实例继承、重复实例、撤销栈串线或布局数据损坏。建议统一记录以下字段edit_session_id layout_id module_id instance_id preview_state placement_event_id snapped_position command_id save_result reload_result final_result每项结果只标记“通过”“未通过”或“待验证”并附上构建版本、录屏时间和对应日志。没有运行证据时不应把概念图中的组合效果写成已经实现。可收藏的城市编辑器检查清单模块模板、预览对象和正式实例具有不同身份一次确认只产生一个放置事件取消预览不会留下实例、碰撞或历史记录8×8网格、三种高度层和全部模块使用同一套吸附规则越界、重叠、入口堵塞和高度不支持都会被明确拦截删除后视觉、占用、碰撞、导航和保存数据同步移除撤销与重做恢复完整状态而不是只移动可见模型保存后重开实例数量、身份、位置、旋转和占用格保持一致新建城市获得新的布局编号并与旧布局完全隔离编辑器、重新加载和正式构建中的结果均已回读验证。城市编辑器成立的证据不是模块越来越多玻璃模块拼成一座城市只能证明模块化组合的视觉设想存在。真正可用的城市编辑器需要做到每次放置可以追踪非法位置能够解释预览和正式提交互不污染撤销能够恢复完整状态保存后还能准确回读。AI生成3D模型和城市空间草稿可以帮助用户快速确定建筑方向但模块身份、网格规则、碰撞、操作历史和存档生命周期仍然需要在真实工程中逐项验证。只有“看得到城市”和“能持续编辑城市”同时成立工具才接近可用。你会先检查模块吸附和重叠判定还是先验证撤销后保存、重新打开还能恢复一致