简单使用
创建游戏场景
烘培导航场景
选择全部地面场景(导航可以走的区域)
勾选Inspector面板的Static(或选择Static下的Naigation Static)
或者
打开Navigation界面(Window->Navigation)
选择Bake->Bake,即可自动烘培,也可自主设置寻路的
Scene要导航区域出现蓝色区域,即代表烘培成功
开始寻路导航
寻路对象添加寻路组件
在需要寻路的目标上添加“Nav Mesh Agent”组件,用来在朝目标用户移动时避开障碍物
添加脚本实现寻路功能
UnityEngine.AI; //需要引入
public Transform TargetObject; //目标对象
void Start()
{
if (TargetObject != null)
//获取代理在世界坐标系单位中的目标或尝试设置代理在其中的目标
GetComponent<NavMeshAgent>().destination = TargetObject.position;
}
寻路系统部分功能
Agents模块
可以添加多个NabigationAgents可以用不同的Agents,可在"Nav Mesh Agent"组件中Agent Type切换
- 设置烘培Agents的名字
- 烘培的半径,也就是物体的烘培的半径。这个值影响物体能通过的路径的大小,越小,能行走的路径越大,边缘区域越小
- 具有代表性的物体的高度,可以通过的最低的空间高度。这个值越小,能通过的最小高度越小。打个比方就是,1m7的人能通过1m7的洞是正常的,你可以设置height为1m,就能通过1m的高度
- 梯子的高度,这个还是要看模型阶梯的高度来设置
- 烘培的最大的角度,就是坡度了
Areas模块
可以设置自动寻路烘培的层,配合"Nav Mesh Agent"组件使用,在Area Mask设置
步骤
1.添加层
2.设置该层所在区域
选在Scene中所需要该层的对象,在Navigation->Object->Navigation Area选择所需要的层
3.设置Area Mask
在寻路对象"Nav Mesh Agent"组件上的Area Mask勾选或去除需要的层
Bake模块
配置烘培参数,就是蓝色区域范围,高度等,这代表寻路时可以走的区域
- Radius:具有代表性的物体半径,半径越小生成的网格面积越大。
- Height:具有代表性的物体的高度。
- Max Slope:斜坡的坡度。
- Ste Height:台阶高度。
- Drop Height:允许最大的下落距离。
- Jump Distance:允许最大的跳跃距离。
- Min Region Area:网格面积小于该值则不生成导航网格。
- Height Mesh:勾选后会保存高度信息,同时会消耗一些性能和存储空间。
Object模块
设置去烘培哪个对象,比如地形之类的,就是可以行走的范围路径.设置时,需要选择具体的对象
- Scene Filter:选择场景中那些对象,可以选择全部(All),地形(Terrains),有网格对象(Mesh Renderers)
- Navigation Static:可以烘培
- Generate OffMeshLinks:可以跳跃的地方(遇到90度坡,会直接跳下来)
- Navigation Area:上面有介绍
Off-Mesh Link组件
官网介绍:允许您合并无法使用可行走表面来表示的导航捷径。例如,跳过沟渠或围栏,或在通过门之前打开门,全都可以描述为网格外链接。
添加方法
组件添加
- Start:设置起点
- End:设置终点
- Cost Override:定义角色通过这个“跳跃线”所要付出的代价是多少。注意:这里的代价覆盖的是“Navigation Area”参数指定的地形代价。-1为不考虑代价。如:想优先选择步行,就可以考虑这个
- Bi Directional:如果启用此属性,则可以在任一方向上遍历链接。否则,只能按照从 Start 到 End 的方向遍历链接。
- Activated:用于设置该跳跃线是否激活,是否可用。激活状态:跳跃线为深蓝色;未激活状态:跳跃线为暗红色。
- Auto Update Positions:如果勾选该参数,则表示自动更新位置,我们在运行状态的时候,是可以动态的改变开始点或者结束点的位置的,同时跳跃线也会动态的更新,反之亦然。
- Navigation Area:功能和上面Areas模块一样
Navigation界面添加
注意:该方法添加OffMeshLink,还需要在Bake模块修改"Generated Off Mesh Links"下的值,为0则无效
NavMeshObstacle组件
如果想要在场景中,动态的放置障碍物,然后也不想在场景开始前就洪培好地形的话,就可以在物体上加上这个组件,然后设置好参数,将自动寻路组件NavMeshAgent的寻路避让优先级调高一点
或者说: 在角色的导航范围内,如果说需要出现障碍物,我们一般是将这些障碍物设置为静态,一起参与 Navigation 的导航烘焙;这样的话,我们的角色在导航的时候,就不会与这些障碍物模型相碰撞。但是如果说我们需要一些“动态的导航障碍物”,这些障碍物模型不设置静态,不参与烘焙,甚至是通过代码实例化出来的模型动态的添加到我们的导航地形中,我们就需要用到一个新的组件了,这个组件就是 Nav Mesh Obstalce。
- Shape:控制障碍物的形状,正方体或者胶囊体。注意:这个障碍物可以是一个空物体,我们就是通过这个 Shape 属性来控制这个障碍物的范围。
- Center:中心点,如果障碍模型的中心点不在模型的中心点上就可以做一些调整
- Size:设置大小
- Carve:只有勾选了该属性,这个障碍物才会生效。
- Move Threshold:大于该值的移动,才认为是真正发生了移动。或者移动某个距离后进行烘焙
- Time To Stationary:每间隔多长时间,检查一次该障碍物的位置,如果发生了移动则动态的更新导航网格的数据。
- Carve Only Stationary:勾选后,模型移动时不会实时烘焙。
当前就写到这.....