多层悬浮平台、立体建筑或垂直迷宫导入 Unity、Unreal 后,NPC 能找到路径,不代表它走在正确楼层。常见异常包括:NPC 停在上层目标的正下方原地打转、从平台边缘直接落到下层,或者电梯已经离开,NPC 仍沿着旧路线前进。
这些现象分别指向三类问题:目标被投影到了错误楼层、上下层导航面发生误连接,以及动态连接或旧路径没有及时失效。
先给结论:不要一开始就扩大寻路范围或修改移动速度。应先固定一名 NPC、一个起点和三个目标,以八层悬浮平台、两段楼梯、两处电梯和三个跳跃连接为测试场景,按"逐层基线---代理参数---导航分层---跨层连接---目标投影---动态更新"的顺序排查。
核心判断是:俯视图中的平台重叠,不等于导航数据连通;视觉上距离很近,也不等于存在合法通路。每层的可行走面、代理尺寸、跨层连接、目标投影和动态回收都需要单独验证。

图注:上下叠放的平台适合说明垂直导航与跨层连接,但可行走面、楼梯、电梯和跳跃链接仍需运行验证。
一、为每层建立独立基线与楼层编号
问题:一上来测试跨层,无法判断错误出在哪一层
八层平台同时开启时,NPC 走错楼层,可能是目标投影错误,也可能是导航面被意外合并,还可能是楼梯、电梯或跳跃连接方向配置错误。若日志中只有世界坐标,调试时很难快速判断 NPC 实际处于哪一层。
原因:世界高度不能稳定代表业务楼层
导航系统通常根据空间位置生成可行走区域,但任务和关卡逻辑还需要明确"对象属于哪一层"。只用 Y 轴或 Z 轴高度区间推断楼层并不可靠:平台可能倾斜、上下移动,也可能在流式加载后改变局部坐标。两个平台高度接近时,目标还可能被投影到相邻楼层。
怎么检查
给八层平台分别设置 floor_01 至 floor_08,同时保存:
- 楼层的世界高度范围;
- 对应的导航区域;
- 可行走边界;
- 可用的跨层连接;
- 当前加载和可用状态。
测试时先关闭所有跨层连接,只保留单层起点和目标。逐层记录 NPC 的当前位置、目标楼层、目标投影位置和最终到达结果。
通过标准是:每一层都能从本层起点走到本层目标,NPC 不穿出边界,也不会把目标投影到其他层。单层测试还不稳定时,不要继续调整跨层路线,否则多个问题会叠在一起。
二、统一 Agent 高度、半径、坡度与台阶参数
导航代理可以理解为 NPC 在场景中占用的空间模型。它的高度、半径、最大坡度和最大台阶高度,决定哪些区域能够被判定为可通行。
问题:上下平台视觉上分开,导航却互相影响
当两层平台的净空小于代理所需高度时,导航数据可能无法稳定区分上下表面。楼梯坡度过大或台阶高度超出代理能力时,楼梯中间还会出现断点。NPC 可能停在入口,也可能寻找一条错误的下落路线。
怎么检查
用小、中、大三组 Agent 参数做对照,记录:
- 代理高度与半径;
- 最大可行走坡度;
- 最大可跨越台阶高度;
- 平台之间的最小净高;
- 楼梯宽度、坡度与单级高度。
以项目实际 NPC 的参数作为基线,另外两组只用于确认问题是否由代理尺寸引起。
如果只有小代理能够通过某段楼梯,不要为了这一处路线全局缩小半径。这样可能让 NPC 穿过原本应该阻挡它的缝隙,还会改变转弯和局部避障结果。更可靠的处理方式是调整楼梯几何、平台净空或局部导航配置,然后重新完成八层测试。
三、从侧视图检查上下层导航面是否被错误合并
问题:俯视图重叠的平台被当成同一片导航区域
悬浮平台在俯视图中经常互相遮挡。若装饰地板、平台底面、碰撞代理和平台顶面同时参与导航生成,就可能出现导航面重叠、穿透或错误连接。NPC 画面上像是站在上层,实际查询到的却可能是下层导航多边形。
原因:可见几何不等于可行走几何
导航系统真正使用的是参与生成的几何与区域标记,不是玩家看到的完整模型。平台底面、装饰板、悬挂道具甚至隐藏碰撞体,都可能被误判为可行走表面。
怎么检查
切换到侧视图,显示导航体素或导航多边形,逐层确认:
- 上层顶面属于哪个
floor_id; - 下层顶面是否保持独立;
- 平台底面是否被错误标记为可行走;
- 不同楼层是否因水平投影重叠而意外连通;
- 装饰网格和隐藏碰撞是否参与了导航生成。
必要时使用独立导航区域、楼层标签或不同的生成范围隔离各层。通过标准是:同一楼层内部连续,没有明确连接时,上下楼层不能仅因距离接近而自动连通。
如果侧视图已经出现导航面穿层,应先修复生成输入与区域范围,再分析 NPC 的路径选择。
四、楼梯、电梯与跳跃必须使用明确连接
问题:NPC 走到电梯边后停住,或者直接从平台边缘掉到下层
楼梯、电梯和跳跃连接的工作方式不同。楼梯通常可以由连续导航面表示;电梯与跳跃则需要显式连接,并明确起点、终点、方向、代价和可用条件。场景里放置了一部电梯,不等于导航系统自动知道该怎样搭乘。
怎么检查
为每条跨层连接分配唯一的 link_id,至少记录:
text
link_id | from_floor | to_floor | direction | cost | enabled | reason
两段楼梯重点检查入口、出口和中间导航是否连续;两处电梯需要检查停靠层、轿厢位置、门状态与乘坐时机;三个跳跃连接则要核对起跳点、落点、允许使用的代理类型和单向或双向规则。
以下情况发生时,相关连接应立即变为不可用:
- 电梯离开当前停靠层;
- 电梯门尚未打开;
- 伸缩平台或桥梁已经收回;
- 目标楼层尚未加载完成;
- 起跳点或落点被动态障碍占用。
每次启用、禁用和移动都应留下日志。这样才能区分"连接状态错误"与"旧路径没有更新",避免 NPC 仅凭视觉距离直接跨过空气。
五、目标点先绑定楼层,再投影到导航面
问题:NPC 停在目标正下方,路径查询却显示成功
同一个水平坐标可能对应多个楼层。点击目标、任务系统或脚本如果只提供世界坐标,导航系统可能把目标投影到距离最近的下层。此时路径查询在数据上成功,NPC 到达的却不是任务要求的楼层。
原因:最近的导航面不一定是正确导航面
目标投影是把世界坐标匹配到可行走导航面的过程。搜索高度和半径设置过大时,查询会优先选择空间上最近的多边形,而不是语义上正确的楼层。平台重叠越多、层间距越小,这类错误越容易发生。
怎么检查
任务目标应同时保存世界坐标和目标 floor_id。投影时限制:
- 允许搜索的楼层;
- 垂直搜索范围;
- 水平搜索半径;
- 可接受的导航区域类型;
- 可用的跨层连接状态。
日志至少记录原始目标坐标、目标楼层、投影后坐标、选中的导航多边形和投影结果。
如果目标无法落在指定楼层,应明确返回"目标不可投影"或"目标楼层不可达",由任务系统重新选点或提示失败。不要静默投影到邻层,否则表面上路径成功,实际行为却无法解释。
六、动态更新、流式加载与目标设备复测
问题:电梯离开后仍能寻路,楼层卸载后 NPC 继续引用旧路线
多层场景经常包含移动电梯、伸缩桥梁和流式加载区域。连接状态改变、几何移动或楼层卸载后,原来的路径可能已经失效。如果旧连接、旧导航多边形或缓存路径没有及时清理,NPC 就会继续执行一条已经不存在的路线。
怎么检查
分别测试以下状态变化:
- 电梯离站、移动、到站、开门和关门;
- 桥梁收回、伸出和停止;
- 楼层加载、导航就绪、卸载和再次加载;
- NPC 查询前、行走中和即将到达时发生环境变化。
每次变化都要确认:旧连接何时注销、新连接何时可用、已有路径何时失效、NPC 是否触发重新寻路。如果区域已经卸载,应清除 NPC 对旧导航多边形和旧路径的引用;新区域尚未就绪时,不应提前发起跨层查询。
导航逻辑正确后,再测试性能。固定同一组起点与三个目标,分别比较 1、10、30 个 NPC 的路径查询耗时、CPU 帧时间、失败次数和导航更新耗时。最终还要在目标设备与正式构建中复测,不能只依据编辑器表现判断。
七、用三轮测试完成验收
第一轮:逐层寻路
关闭所有跨层连接,分别测试八层平台的本层起点到本层目标。记录 NPC 是否到达指定 floor_id、是否经过错误区域,以及目标投影是否落在当前楼层。
这一轮用于确认每层基础导航,不测试楼梯、电梯和跳跃。
第二轮:合法跨层
依次测试两段楼梯、两处电梯和三个跳跃连接,检查每条连接的方向、代价、启用条件和目标楼层。
重点观察:NPC 是否从上层直接掉落,是否能在电梯门口等待,是否把跳跃连接误当作普通地面,以及单向连接能否被反向使用。
第三轮:动态变化
在 NPC 已经获得路径、正在行走和即将抵达三个阶段,分别移动电梯、收回桥梁、卸载楼层并重新加载。确认旧路径是否失效、是否触发重算,以及失败原因能否被日志解释。
建议交付表至少包含以下字段:
text
agent_id | current_floor | target_floor | projected_position
link_id | path_status | rebuild_time | final_result
测试失败时,应同时保留异常截图、侧视导航图、目标投影结果和连接状态,不能只记录一句"寻路失败"。
在整理悬浮平台层级、碰撞和区域边界时,可以使用世界模型或场景编辑流程辅助组织空间结构。但场景生成不能替代导航网格生成、动态连接更新和目标设备性能测试。资产与空间组织是一层,运行时可行走数据与路径状态是另一层,两者必须分别验收。
八、可直接复用的检查清单
- 八层平台是否都有独立的
floor_id、高度范围和边界? - 是否先完成逐层测试,再开始跨层测试?
- Agent 高度、半径、最大坡度和台阶参数是否统一记录?
- 是否从侧视图确认上下层导航面没有意外合并?
- 两段楼梯、两处电梯和三个跳跃连接是否都有唯一
link_id? - 每条连接是否记录起点楼层、终点楼层、方向、代价和启用状态?
- 目标是否先绑定
floor_id,再限制投影高度和搜索范围? - 投影失败时是否明确报错,而不是静默选择相邻楼层?
- 电梯、桥梁和楼层状态变化后,旧连接与旧路径是否及时清理?
- 是否比较 1、10、30 个 NPC 在目标设备上的查询耗时和失败数?
- 交付记录是否包含代理、楼层、目标投影、连接、更新耗时和最终结果?
路径成功不等于楼层正确
多层悬浮平台的导航问题,不能只看 NPC 是否找到一条路径。正确验收还要回答六个问题:NPC 当前在哪一层,代理尺寸是否适配,导航面有没有串层,跨层连接是否明确,目标是否投影到正确楼层,以及动态变化后旧数据是否已经回收。
按"逐层基线---代理参数---导航分层---跨层连接---目标投影---动态更新"的顺序检查,通常比反复扩大搜索范围、修改移动速度或重新烘焙整张导航网格更容易定位根因。
AI 生成的 3D 场景适合快速搭建平台形态、空间层次和视觉草稿,但正确碰撞、可编辑导航输入、稳定的动态连接,以及 Unity、Unreal 和目标设备上的运行结果,仍需要人工整理与实测。
你的 NPC 更常停在目标正下方、直接从上层掉下去,还是电梯离开后仍把旧路线当成可用?