一 介绍
Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路,比如可以制作点击某个位置,让角色自动的绕开障碍走到目标点的效果,比如可以制作敌人AI,让它可以通过NavMesh绕开障碍追击我方单位。甚至可以在NavMesh中设置传送门,跳跃的起点落点,让这些效果也参与寻路的计算,成功计算出导航的捷径
二 创建3D项目
2.1 新建核心3D模板
2.2 新建Plane当作地面
2.3 新建立方体当角色
2.4 开启物理导航组件,窗口->包管理器->unity注册表
2.5 给角色添加网格导航,Nav Mesh Agent选项
2.6 把地面组件勾选静态
2.7 找到导航系统,烘培地面Window-->AI-->Navigation
2.8 编写脚本,新建C#脚本文件
2.9 拖动挂载到角色上面,双击打开VS编辑
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class NewBehaviourScript : MonoBehaviour
{private NavMeshAgent agent;void Start(){agent = GetComponent<NavMeshAgent>();}RaycastHit hit;//碰撞体// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out hit)){agent.SetDestination(hit.point);}}}
}
2.10 保存,返回Unity运行,这个时候就能点击鼠标,物体自动移动到鼠标位置
三 导航系统参数介绍
3.1 Unity 3D 导航系统由 1个Navigation总控制面板 和 3个组件 组成,该系统是由 A*算法 延伸扩展实现的,由4部分组成,分别是 Agents,Areas,Bake,Object
3.2 常用的导航组件是自动寻路组件,障碍物组件,跳跃组件,如下图
3.3 Agents面板,导航参数设置
- Name:设置烘焙 Agents 的名字。
- Radius:烘焙的半径,也就是对象烘焙的半径。这个值影响对象能通过的路径的大小,值越小,能行走的路径越大,边缘区域越小。
- Height:具有代表性的对象的高度,可以通过的最低的空间高度。值越小,能通过的最小高度越小。
- Step Height:梯子的高度。需要根据模型阶梯的高度设置。
Max Slope:烘焙的最大角度,即坡度。
3.4 Areas面板,层设置,该面板可以设置在自动寻路时,对象可以通过那些层。 这里输入的名称会在 Object 面板的 Navigation Area 下显示
3.5 Bake面板(烘焙导航网格
- Agent Radius:具有代表性的对象的半径,半径越小生成的网格面积越大。
- Agent Height:具有代表性的对象的高度。
- Max Slope:斜坡的坡度。
- Step Height:台阶的高度。
- Drop Height:允许最大的下落距离。
- Jump Distance:允许最大的跳跃距离。
- Min Region Area:网格面积小于该值则不生成导航网格。
- Height Mesh:勾选后会保存高度信息,同时会消耗一些性能和存储空间。
3.6 Object面板,对象
在该面板中可以选择,设置要参与导航网格烘焙的对象,可以设置对象是可以被自动寻路的,如路面。也可以设置对象是不可以被自动寻路的(即不可行走),如湖面
- Generate OffMeshLinks:设置地面可跳跃。
- Navigation Area:设置对象以特定的路线寻路。
四 各导航组件属性介绍
4.1 Nav Mesh Agent,自动寻路组件
- Agent Type:寻路类型,可以在 Navigation 总控制面板中设置类型。
- Base Offset:偏移值。值越大越容易寻路,但是目标会偏移得越远。
- Speed:对象自动寻路的速度。
- Angular Speed:对象自动寻路的转弯速度。
- Acceleration:加速度。
- Stopping Distance:对象停下的距离。如果值设置为0,则在距离目标点为0处停下
- Auto Braking:是否自动停下。
- Radius:对象躲避障碍物的半径。大于这个半径无法躲避障碍物。
- Height:对象躲避障碍物的等级。等级越高,躲避障碍物越准确。
- Priority:优先级。值越大,障碍物躲避越优先。
- Auto Traverse Off Mesh Link:自动跳跃链接。
- Auto Repath:自动复制路径。
- Area Mask:能通过的Mask层,可以配合 Navigation 组件中的 Areas 使用。
4.2 Nav Mesh Obstacle,障碍物组件
- Shape:障碍物的形状。
- Center:障碍物的中心点坐标。
- Size:障碍物的大小。
- Carve:障碍物的网格。
4.3 Off Mesh Link,跳跃组件
- Start:跳跃的开始点。
- End:跳跃的结束点。
- Cost Override:是否计算路径开销,即是否将寻路计入寻路距离。
- Bi Directional:开始点和结束点是否可以互跳。
- Activated:是否激活。
- Auto Update Position:自动更新位置坐标。
- Navigation Area:可以寻路的层。