unity Navigation mesh自动寻路
Unity Navigation Mesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一项重要技术。它的核心原理是将游戏中复杂的结构组织关系简化为带有特定信息的网格,然后基于这些网格进行一系列计算来实现自动寻路。在导航时,只需给导航物体挂载导航组件,该物体就能自行根据目标点寻找最直接的路线,并沿着此路线到达目标点。接下来,我们将详细学习Unity Navigation Mesh自动寻路的相关内容。
NavMesh应用示例
下面通过一个简单的示例来介绍NavMesh的应用:
- 创建场景物体:在Scene中新建三个Cube,并按照特定布局摆放。
- 设置物体为静态:选中这三个Cube,在Inspector面板中选择静态(static)下拉选项中的Navigation Static。此操作表示这些对象将参与导航网格的烘焙。
- 生成导航网格:依次选择菜单栏中的“Windows - Navigation”,打开导航面板。单击该面板右下角的“Bake”按钮,即可生成导航网格。
- 实现自动寻路:
- 新建一个Cube作为目标位置,命名为“TargetCube”。
- 创建一个Capsule(胶囊)作为运动体,并为该胶囊挂载一个Nav Mesh Agent(通过“Component - Navigation - Nav Mesh Agent”添加)。
- 编写以下脚本实现自动寻路:
using UnityEngine; using System.Collections;
public class Run : MonoBehaviour { public Transform TargetObject = null;
void Start () {
if (TargetObject != null)
{
GetComponent
void Update () { } }
- 将上述脚本挂载到胶囊体上,然后将“TargetCube”赋值给胶囊体的“Run”脚本。运行场景后,胶囊体将按照指定路线运动到“TargetCube”位置。
通过以上步骤,一个简单的自动寻路功能就完成了。如果需要更精细的寻路,或者要实现上坡、钻“桥洞”等特殊效果,可以根据下面介绍的相关参数进行调节。
## Navigation组件和Nav Mesh Agent组件的相关参数
### Navigation组件参数
#### Object(物体参数面板)
- **Navigation Static**:勾选后表示该对象参与导航网格的烘焙。
- **OffMeshLink Generation**:勾选后可实现跳跃(Jump)导航网格和下落(Drop)的功能。
#### Bake(烘焙参数面板)
- **Radius**:代表具有代表性的物体半径,半径越小,生成的网格面积越大。
- **Height**:代表具有代表性的物体的高度。
- **Max Slope**:斜坡的坡度。
- **Step Height**:台阶高度。
- **Drop Height**:允许的最大下落距离。
- **Jump Distance**:允许的最大跳跃距离。
- **Min Region Area**:当网格面积小于该值时,将不生成导航网格。
- **Width Inaccuracy**:允许的最大宽度误差。
- **Height Inaccuracy**:允许的最大高度误差。
- **Height Mesh**:勾选后会保存高度信息,但同时会消耗一些性能和存储空间。
### Nav Mesh Agent组件参数
- **Radius**:物体的半径。
- **Speed**:物体的行进最大速度。
- **Acceleration**:物体的行进加速度。
- **Angular Speed**:行进过程中转向时的角速度。
- **Stopping Distance**:离目标距离还有多远时停止。
- **Auto Traverse Off Mesh Link**:是否采用默认方式通过链接路径。
- **Auto Repath**:在行进因某些原因中断后是否重新开始寻路。
- **Height**:物体的高度。
- **Base Offset**:碰撞模型和实体模型之间的垂直偏移量。
- **Obstacle Avoidance Type**:障碍躲避的表现等级,“None”选项表示不躲避障碍,等级越高,躲避效果越好,但同时消耗的性能也越多。
- **Avoidance Priority**:躲避优先级。
- **NavMesh Walkable**:该物体可以行进的网格层掩码。