前言
Unity是一款强大的游戏开发引擎,而人工智能(AI)导航是游戏中至关重要的一部分。通过Unity的AI Navigation系统,开发者可以轻松地为游戏中的角色实现自动导航功能。本文将介绍Unity中AI Navigation的基础内容,帮助开发者快速入门。
一、Unity中AI Navigation是什么?
Unity中的AI Navigation是一套用于游戏开发的导航系统,它使开发者能够为游戏中的角色提供智能的路径规划和导航功能。通过AI Navigation系统,游戏中的角色可以根据场景中的障碍物、地形等信息,自动计算出最佳路径,并沿着路径移动到目标位置。
二、使用步骤
1.安装AI Navigation
![图片[1]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-3e210af3f5fe480c8c9e7608aee54f44_1440w.png)
![图片[2]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-78e8a7da8147a98cc8288d930e38a269_1440w.png)
2.创建模型和材质
创建地面和材质
![图片[3]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-73f643aefb4e257eea66cbe1a044045b_1440w.png)
![图片[4]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-89561fdde0e4c9de7e75700d839ed5e9_1440w.png)
创建一个空物体,把Plane放到里面,然后挂载NavMeshSurface组件获取当前地图数据
![图片[5]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-6a6bd2163d1abeff7367df7c2b2638c6_1440w.png)
NavMeshSurface 是 Unity 中用于生成导航网格的组件。它表示特定 NavMesh Agent 类型的可行走区域,并定义了场景中应该构建 NavMesh 的部分。
以下是 NavMeshSurface 组件的一些属性介绍:
- Agent Type:指定使用该 NavMeshSurface 的 NavMesh Agent 类型。这对于烘焙设置和在寻路期间将 NavMesh Agent 匹配到适当的表面非常有用。
- Default Area:定义在构建NavMesh时生成的区域类型。
- Generate Links:如果启用此选项,由 NavMeshSurface 收集的对象将在烘焙过程中被视为生成链接。有关更多信息,请参阅链接生成部分。
- Use Geometry:选择用于烘焙的几何体。
- Object Collection:定义用于烘焙的 GameObject 集合。
- Advanced Settings:高级设置部分允许您自定义以下附加参数。
- NavMeshData(只读):定位存储 NavMesh 的资产文件。
点击bake开始烘焙地形
![图片[6]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-99301480199f7fbe215b95de6a571c06_1440w.png)
给Player挂上Nav Mesh Agent组件
![图片[7]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-464736f002827222f3eacf6163138023_1440w.png)
NavMeshAgent 是 Unity 中用于导航的组件,用于控制角色在场景中的移动。
以下是 NavMeshAgent 组件的一些属性介绍:
- AgentType:代理的类型 。
- BaseOffset:相对垂直位移偏差。
- Speed:遵循路径时的最大移动速度。
- AngularSpeed:遵循路径时的最大转向速度(以度/秒为单位)。
- Acceleration:代理在遵循路径时的最大加速度,以单位/秒2为单位。
- StoppingDistance:距离目标位置停止的距离。
- AutoBraking:代理是否自动刹车以避免超过目标点
- Radius:代理的避让半径。
- Height:代理的高度,用于通过障碍物等。
- Priority :用于设置避让优先级。
- AreaMask:指定哪些 NavMesh 区域可通行。
3.编写向目标移动的脚本
代码如下(示例):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class SetDestination : MonoBehaviour
{
private NavMeshAgent _agent;
private Transform _target;
// Start is called before the first frame update
void Start()
{
_agent = GetComponent<NavMeshAgent>();
_target = GameObject.Find("Target").transform;
}
// Update is called once per frame
void Update()
{
_agent.SetDestination(_target.position);
}
}
然后把脚本挂载Player上
4.NavMeshLink桥接组件
创建2个不贴合的平面,然后烘焙导航网格
![图片[8]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-9af3777b15c314c7ee3751b606b782c7_1440w.png)
创建一个空物体并添加NavMeshLink组件
NavMeshLink 是 Unity 中用于导航的组件,用于创建可导航的链接,连接使用 NavMesh 的不同位置。这些链接可以是从点到点,也可以跨越空隙,此时代理会使用入口边缘上最近的位置来穿越链接。您必须使用 NavMeshLink 来连接不同的 NavMesh Surface。
![图片[9]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-2a8d4de7e7694fc6a054081d7a7d6fd0_1440w.png)
- Start Point:链接的起始点,相对于 GameObject。使用 XYZ 坐标定义。
- End Point:链接的结束点,相对于 GameObject。使用 XYZ 坐标定义。
选中图中的小方块,然后移动
![图片[10]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-6c1d735562ff36d6bd724ada13daf084_1440w.png)
![图片[11]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-31ca2472d2714e287e608aa4a8760c26_1440w.png)
5.NavMeshObstacle组件
NavMeshObstacle 是 Unity 中用于导航的组件,用于描述移动障碍物,这些障碍物在导航世界中需要被 NavMesh Agents 避开(例如由物理系统控制的桶或箱子)。
以下是 NavMeshObstacle 组件的一些属性介绍:
创建一个模型,添加一个NavMeshObstacle组件
![图片[12]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-2adc72baa854415177361a96d5fdfd13_1440w.png)
- Shape:指定障碍物的几何形状。可选择以下形状之一:
- Box:选择一个立方体形状的障碍物。
- Center:相对于变换位置的立方体中心。
- Size:立方体的尺寸。
- Capsule:选择一个椭圆形状的障碍物。
- Center:相对于变换位置的胶囊中心。
- Radius:胶囊的半径。
- Height:胶囊的高度。
- Carve:启用此选项后,障碍物在静止时会在 NavMesh 中刻出一个洞。当障碍物移动时,它成为一个阻碍物。
- Move Threshold:设置更新移动刻出洞的阈值距离。当障碍物移动超过此距离时,Unity 将其视为移动中。
- Time To Stationary:指定障碍物被视为静止的等待时间(以秒为单位)。
- Carve Only Stationary:启用此选项后,仅当障碍物静止时才会刻出洞。
6.NavMeshModifler组件
NavMeshModifier 是 Unity 中用于导航的组件,用于在运行时调整 GameObject 的行为,影响导航网格的生成。以下是 NavMeshModifier 组件的一些属性介绍:
- Mode:指定是否考虑或忽略受影响的 GameObject。
- Add or Modify Object:在构建 NavMesh 时考虑受影响的 GameObject。
- Remove Object:对于指定的代理类型,在构建 NavMesh 时忽略受影响的对象。
- Affected Agents :指定 NavMeshModifier 影响的代理类型。
- All:修改所有代理的行为。
- None:排除所有代理的修改行为。
- Apply to Children:将配置应用于 GameObject 的子级层次结构。如果需要在层次结构的较低级别覆盖此组件的影响,可以添加另一个 NavMeshModifier 组件。
- Override Area:更改受影响的 GameObject 的区域类型。如果要更改区域类型,请选中复选框,然后在区域类型下拉菜单中选择新的类型。如果不想更改区域类型,取消选中复选框。
- Override Generate Links:在生成链接时,强制包括或忽略受影响的 GameObject。
- Generate Links:指定在生成链接时是否包括受影响的 GameObject。如果要在 NavMesh 构建过程中包括 GameObject,请选中此复选框
创建一个路线并挂载NavMeshModifler组件
![图片[13]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-2f2e638ae7a9fed7aa02c5b5cbaf045f_1440w.png)
![图片[14]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-3fd6b3fea93be9b66fb450555f470743_1440w.png)
![图片[15]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-6555f349218b3b76179a6636de76ad53_1440w.png)
![图片[16]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-4721454f6ce22481e2bbf8dbf6beaabe_1440w.png)
三、效果
![图片[17]-Unity AI Navigation自动寻路-灵码CV](https://www.0cv.com/wp-content/uploads/2025/12/v2-92c9172c266fd0444bc29e57ec36b45f_1440w.gif)
总结
Unity的AI Navigation系统为游戏开发者提供了强大的路径规划和导航功能,使得开发者能够轻松实现游戏中角色的智能行动。通过本文的介绍,希望读者能够对Unity中AI Navigation的基础使用有所了解,并能够在自己的游戏项目中应用起来。















暂无评论内容