确定用户需求并引导他们完成导航设置。有关扩展的组件详细信息、API 说明、代码示例和故障排除,请参阅 navigation-system.md。
将 C# 传递给 eval
eval 编译的是一个语句块,而不是文件。这会产生两个后果,两者都会导致编译错误而非警告:
- 没有
using指令。 编译器将using UnityEngine;解读为资源释放语句并拒绝它(CS0210)。 - 类型必须完全限定。 裸写的
AssetDatabase或Volume无法解析(CS0246/CS0103),而裸写的Object会与object歧义(CS0104)。
如果下面的代码片段是作为文件编写的——为了可读性而使用了 using,或者因为它需要保存到项目中——请在将其传递给 eval 之前限定类型。
路由逻辑
| 用户输入 | 解释 |
|---|---|
| "添加导航" / "设置导航" | 完整设置:NavMeshSurface + 烘焙 + NavMeshAgent |
| "让这个角色导航" | 添加 NavMeshAgent,确保存在 NavMesh |
| "添加寻路" | NavMeshAgent + 移动脚本 |
| "角色不动" / "找不到路径" | 故障排除——参见参考文档中的故障排除决策树 |
| "避让障碍物" | NavMeshObstacle(带雕刻或避让) |
| "连接两个区域" / "跳跃穿过" | 区域之间的 NavMeshLink |
| "在点之间巡逻" | NavMeshAgent + 巡逻脚本 |
| "点击移动" | NavMeshAgent + 射线检测点击移动脚本 |
| "在导航时为角色设置动画" | 将 Animator 与 NavMeshAgent 耦合 |
| "不同的代理大小" | 在导航窗口中配置代理类型 |
| "区域和成本" / "限制区域" | NavMesh 区域类型、修饰符和代理区域遮罩 |
工作流
0. 检查包是否安装
在执行任何操作之前,请验证 com.unity.ai.navigation 是否已安装。如果缺少,请将其添加到 Packages/manifest.json 的 dependencies 中——当编辑器重新获得焦点时,Unity 会解析它,这不需要编辑器连接:
"com.unity.ai.navigation": "<当前 2.x 版本>"
不要自行编造版本字符串。从 Unity 注册表中读取当前版本——https://packages.unity.com/com.unity.ai.navigation 列出了每个已发布版本——或者复制此清单中相邻 Unity 包已使用的版本。一个不存在的版本会导致 Unity 静默地解析失败,因此错误猜测看起来就像什么都没发生一样。
只有在确认安装后才继续。如果您有正在运行的编辑器可以运行 C#,请参阅 navigation-system.md 了解对应的 Client.Add 方法。
1. 预检:评估当前导航设置
在进行更改之前,检查已经存在的内容:
- 查找现有的导航组件。如果编辑器已连接,查询实时场景中的
NavMeshSurface、NavMeshAgent、NavMeshObstacle、NavMeshLink和NavMeshModifier——请参阅unity-cli技能以了解如何驱动正在运行的编辑器。如果没有连接,则搜索场景和预制体文件中这些组件的名称。 - 通过 Window > AI > Navigation > Agents 选项卡检查已配置的代理类型。
- 在提出更改建议之前,汇总所有检测到的导航组件。
2. 收集缺失信息
在创建组件之前,确保用户已明确:可行走的表面、代理类型/大小、代理行为、障碍物、链接以及区域/成本要求。如有任何不清楚的地方,请提出疑问。有关完整详细信息,请参阅参考文档中的信息收集清单。
3. 规划与执行
遵循以下一般顺序。有关每个组件的详细分步说明,请参阅参考文档中的组件设置指南:
- NavMesh 表面——创建可行走的网格(烘焙它)
- NavMesh 代理——添加寻路角色
- NavMesh 障碍物——添加动态障碍物
- NavMesh 链接——连接不连通的 NavMesh 区域
- NavMesh 修饰符 / 修饰符体积——微调区域类型
- 脚本——移动、巡逻、点击移动、动画耦合(参见参考文档中的常见示例)
4. 验证
设置完成后,确认:
- NavMesh 已烘焙且可见(蓝色叠加层)
- NavMeshSurface 代理类型与 NavMeshAgent 代理类型匹配
- 代理有一条到其目的地的有效路径
- 障碍物正确雕刻或阻挡
- 链接两端均已连接且“已激活”已启用
- 区域遮罩允许预期的移动
- 没有冲突的组件(请参阅参考文档中的混合组件指南)
- 如果 NavMeshAgent 与 Rigidbody 一起使用,则已启用“是运动学的”
5. 最终确认
总结创建或更改的内容:
- NavMesh 表面:哪个游戏对象、代理类型、几何模式、烘焙状态
- NavMesh 代理:哪个游戏对象、速度、停止距离、区域遮罩
- NavMesh 障碍物:哪个游戏对象、形状、是否启用雕刻
- NavMesh 链接:起点/终点、是否双向、区域类型
- 脚本:哪些脚本附加到哪些游戏对象
- 任何需要手动完成的步骤(调整路径点、场景更改后重新烘焙等)