导航网格


什么是导航网格?

导航网格是由场景设计师创建的模型汇编,供AI使用,以确保它们可以在不与场景中的物理对象碰撞的情况下移动。


导航网格的重要规则是什么?

a. 1.5米规则:设计者在地形或其他可行走或可站立的物体(屋顶、城堡墙等)上创建导航网时,需要将导航网的直径安排在1.5米内,这个直径需要以1.5米为垂直轴。如果不适用这个1.5米的规则,AI在行走时将无法寻路。

b. 生成点支点:场景中的每个生成点都有支点。Navmesh多边形面必须包括这些生成点支点。否则,生成点将无法工作。

c. 现有的树:场景中的每一棵树都有一个物理对象,我们称之为 “胶囊”(capsules)。AI在战斗中会自动看到这些胶囊。正因为如此,AI不会走进树木。导航网格可以应用在树木下。

d.地形角度:有些区域由于角度陡峭而无法穿越。这些区域可以通过Shaded > Debug - Terrain Angle方式启用。。在打开的角度限制窗口中,设计师可以输入 “50 “来启用这些区域。你可以看到两个区域,分别是绿色和红色。绿色区域是可以穿越的,红色区域则不能。

e. 在哪里应用Navemesh:导航网格应该应用在每个玩家可以行走的表面。导航网格不应该应用在物理物体的下方。由于AI不能跳跃,所以可以通过跳跃进入的区域不应该包含导航网。

在导航网格中没有”撤销”操作。如果按CTRL + Z键,之前的场景修改将被还原。应用导航网格时,请不要尝试撤消


需要应用多少种类型的导航网格?

导航网格有三种类型:

1.基本导航网状区域(没有ID,ID:0),例如:战斗地形(battle_terrain)、藏身处(hideout)或领主大厅(lords hall)。 2.村庄场景。村庄等场景有多个导航网ID。 3.攻城场景。在这类场景中,主要有平民和攻城两种可视模式。平民模式下的城镇场景可以看作是一个大的村庄场景。但是在围城模式下,有些位置和实例处,需要导航网面有特殊的ID。


导航网格建模准备工作

打开编辑器时,你会看到如下图所示的工具栏

红色方块中的图标是导航网格。点击它,你会看到”NavigationMeshInspector”在检查器中被打开。

打开”导航网检查器”后,您将在用户界面中看到”Editor Mode: Navigation Mesh Select”

导航网检查器中的所有下拉菜单功能都可以在导航网选择模式下使用。点击键盘上的1、2或3可以选择这些面: 1: 顶点 2: 边 3: 面


导航网格建模

到现在为止,我们讲的是导航网格选择工具模式。导航网格的另一种编辑模式是导航网格添加模式

要打开该模式,您可以按 “空格键”。你会看到鼠标指针上有一个顶点预览。

在地图上指出4个不同的点后,按CTRL+Space键创建导航网格多边形。

在多边形创建阶段后,下面的快捷表可以帮助你。下面还有导航网格检查器中生成工具选项卡下可用工具的说明。

Navmesh hotkeys Shortcut Editor State
填入最近的4个顶点(创建四边形)。 Shift + Click 导航网格添加
填入最近的4个顶点(创建四边形)。 Ctrl + Space 导航网格添加
移动顶点而不选择 Ctrl + Drag 导航网格添加
用鼠标删除面(留下顶点)。 Alt + Click 导航网格添加
删除面并移除全部顶点 Alt + X + Click 导航网格添加
选择模式 - 顶点 1 导航网格选择
选择模式 - 边 2 导航网格选择
选择模式 - 面 3 导航网格选择
选择所有顶点、边或面(取决于当前的选择)。 Ctrl + A 导航网格选择
删除选定的顶点、边或面 Delete 导航网格选择

生成工具

最有用的常用工具如下:


场景类型的导航网格建模

我们简单地讨论了如何创建和应用导航网格。让我们通过一些为村庄场景创建导航网格的截图来巩固这些信息。

1.村庄场景

打开一个村庄场景后,让我们导航到可见性选项卡,如下面的截图所示进行更改,以便更舒适地工作。可见度掩码Visibility Masks > 游戏实体Game Entities (Uchecked), 粒子系统Particle Systems (Unchecked), 图层植物Layer Flora (Unchecked), 显示路径Show Paths (Unchecked) Physics Options > 显示物理实体Show Entity Physics (Checked)。

点击工具栏上的导航网格图标,打开右侧的导航网格检查器标签。之后,按键盘上的3键,打开面模式。将ID部分从0改为2.

让我们创建第一个面。如下面的截图所示,将顶点放在道路上面,然后点击CTRL+Space。你会看到一个导航网格多边形创建了。我们可以在现有多边形附近再放置2个顶点,然后按Shift+鼠标左键来创建额外的多边形。



通过在将鼠标导航到顶点的同时按住 CTRL,我们可以看到黄色预览。用鼠标左键按住这些顶点将使我们可以自由移动顶点。

在”导航网格选择”模式中,选择您要使用的模式(1(顶点)2(边)3(面)),然后使用Alt+Delete删除。这将使顶点留在场景中(如果选择了2(边)和3(面)。如果你想让顶点不活动,你可以按Alt+X+Delete键。 另一种删除方法是在导航网格添加模式下。如果我们将鼠标悬停在顶点、边缘或面孔上,并按下ALT键,我们可以看到一个红色的预览。我们可以通过点击鼠标左键来删除它们。

导航网选择模式-导航删除 导航网添加模式-导航删除

更简单、更快速的导航网格制作技巧。


导航网需要包含生成点枢轴点。此处可应用导航网,因为它们与生成点上的所有道路和导航网面相连。


我们在创建导航网面后按空格键检查ID是否设置为2,并将编辑器模式改为导航网面选择模式,按键盘上的 “3 “键。这个过程可以确保我们选择了导航网格面。在这之后,我们选择面,在导航网格检查器上确保ID是2。我们在开始的时候已经看到是2,但是现在我们确定是2,我们可以通过点击Viewport上的空位来取消选择我们选择的内容。现在,我们可以按空格键将编辑器模式改为导航网格添加,然后继续。


请确保您的导航网区域不包含任何物理对象

动物生成点可以在下面的截图中看到。为了确保场景中有动物生成点,你可以点击场景中的实体,检查位于屏幕左下角的文字。

为了防止动物逃跑,我们把导航网像岛屿一样应用,并使用网面ID 2,然后把周围的网格面ID改为3。然后,我们将周围的网格面的ID改为3,这样,动物就不会与道路相连,也不会逃跑。

场景中有一些特殊的区域,我们称之为 “公共区域”。你可以在场景中用一个球体看到这些区域。让我们在这个球体中填入ID为2的导航网格面,同时确保其内部没有物理实体。

在确保所有道路和生成点都已应用并相互连接后,我们已经完成了第一阶段的工作。

如果有无法行走的地形区域,可以点击位于顶部栏的下拉菜单中的”Shaded”选项。在”Debug”栏中选择”Terrain Angle”,并将角度限制改为50。现在,我们可以看到红色区域,并根据这些信息应用导航网格

让我们在导航网格检查器中把ID改为1,同时确保没有选择导航网格面。让我们继续应用导航网格,同时确保网格内没有物理物体。

让我们在确保场景上的每个表面都在边界内后,完成场景的导航网格(你可以用Visibility > Visibility Masks切换边界视图)

这个村庄场景的导航网已经完成。

现在,让我们看看导航网ID的脚本。导航到Prefabs选项卡,在过滤器栏中搜索 “navigation_mesh_deactivator”。让我们把它放到场景中去。在场景选项卡中选择Navigation_Mesh_Deactivator实体。让我们打开Entity Inspector > Scripts > NavigationMeshDeactivator的下拉菜单。将DisableFaceWithId设置为1,DisableFaceWithIdForAnimals设置为3。

保存场景。我们村子场景的导航网格过程就完成了


导航网格面ID的逻辑

ID为2的导航网面,是我们在场景中散步时,AI看到的导航网面。这些面需要相互连接。包括动物生成点的面也需要有ID为2的面。之所以不把这些面孔连接起来,是因为我们不希望动物像人类NPC一样走在路上。要确保动物生成点是激活的,它们的导航网面ID必须是2。为了断开它们与道路的连接,我们应用导航网包围ID为2的动物生成点面孔,并赋予新的导航网面孔ID为3,在这之后,我们还将其包含到navigation_mesh_deactivator脚本中。ID为1的面是在行走模式下不激活的面,但它们必须被应用。当一个村庄被突袭时,所有的导航网格都是激活的,不根据ID有所区别。当我们在场景中行走时,这些都会被激活

ID为2的导航网格处于活动状态 所有的导航网格都处于活动状态