目录

概念

示例

场景搭建

生成网格

导航计算

属性设置

烘焙


概念

在 Unity 中,导航网格(NavMesh)是用于实现角色导航和路径寻径的一种技术。它是一种基于多边形的网格,定义了角色可以行走的区域,并用于计算角色从一个点到另一个点的最优路径。以下是导航网格的一些关键点:

  1. 导航网格生成:导航网格通常是在场景中生成的。你可以在 Unity 编辑器中通过 NavMesh Surface 组件来生成导航网格。这个组件会根据场景中的几何体生成一个适合角色行走的网格。

  2. 导航代理(NavMesh Agent):这是一个组件,用于使角色能够在导航网格上移动。导航代理负责处理路径计算、障碍物避让等功能。你可以通过设置目标位置,导航代理会自动计算路径并移动到目标位置。

  3. 动态障碍物:导航网格支持动态障碍物,可以在运行时更新导航网格,以反映场景中动态变化的障碍物。你可以使用 NavMeshObstacle 组件来实现动态障碍物的效果。

  4. 区域和代价(Areas and Costs):导航网格可以分为不同的区域,每个区域可以有不同的代价。这样可以控制角色更倾向于选择某些区域行走,或者避免某些区域。例如,泥地的代价可以设置得比平坦道路高,角色会优先选择平坦道路。

  5. 链接(Off-Mesh Links):用于连接导航网格上不连续的部分,例如跳跃点、爬梯子等。链接可以手动添加,也可以通过脚本动态创建。

  6. 场景配置:你可以在 Unity 中的 Navigation 窗口中配置导航网格的生成参数,包括步长、斜坡高度、代理高度等参数,以适应不同类型的角色和场景需求。

示例

场景搭建

角色到达高台有两种方式,走斜坡或者走台阶

生成网格

将场景中的地面和立方体设置为静态导航

这样,导航系统就可以根据这些物体的数据来计算当前可以生成的网格

导航计算

如果在窗口中没有找到AI选项,点击窗口->包管理器->注册表,搜索AI

安装好后,重启项目

属性设置

代理半径和代理高度就是指人物的半径和高度,步高就是指人物能移动的最大高度,如果台阶高度大于步高,那么人物就无法走台阶。最大坡度指的是人物能移动的最大坡度,如果场景的坡度大于这个最大坡度,人物也无法走斜坡。

系统就是通过这样的人物数据来生成导航网格。

烘焙

属性设置好后,点击烘焙

烘焙好后,场景中蓝色的区域就是产生的导航网格,也就意味这角色可以在蓝色区域内行走

这里可以看到,边缘会空出一些宽度,这是因为人物中心可以到达边缘的线

那么当人物走到线这个位置时,人物的边缘实际上已经到达地面的边缘了,所以才会空出一段距离,空出的距离的依据是属性里的代理半径。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐