NavMesh导航网格寻路

NavMesh是Unity自带的一种寻路系统,能够轻松简单地实现AI自动寻路效果。

自动寻路是AI中的一个十分重要的分支,寻路算法一般也是十分复杂的。但Unity为我们提供了十分成熟的NavMesh组件用以简单地解决这一问题,使初学者也能够轻松实现寻路功能。

NavMesh寻路系统的操作步骤大致如下:

  • 对场景中的物体进行标记,然后进行路径烘培,产生表格数据。
  • 为需要实现寻路功能的物体添加NavMeshAgent组件。
  • 通过NavMeshAgent组件的属性与方法实现寻路移动功能。

NavMesh的使用如下图所示:

【1】标记与烘培

若想要让你的游戏场景被NevMesh所“认可”,场景内的相应物体都必须被指定为Navigation Static。我们可以通过Navigation菜单栏中设定其状态,也可以直接在Inspector中把物体设定为Static。

设定完成之后,就可以通过Navigation菜单栏的Bake选项卡来对游戏场景进行烘培。烘培的效果是肉眼可见的,我们可以直接在游戏场景中看到场景的烘培效果,如官方图所示:

其次,在Bake选项卡中还可以设定寻路系统的一些细节,例如:

  • Agent Radius:Agent的中心与障碍物的距离。
  • Agent Height:Agent可通过的最低高度。
  • Max Slope:Agent可爬上的最高坡度。
  • Step Height:Agent可上的台阶高度。

【2】添加NavMeshAgent组件

烘培完成之后直接将此组件添加到需要寻路的物体上即可。

NavMeshAgent组件中也有很多参数可以修改,以实现不同的寻路效果。

  • Speed:Agent的最高速度。
  • Angular Speed:最大的转向速度。
  • Acceleration:Agent达到Speed过程中的加速度。
  • Stopping Distance:在距离目的地多远的距离停下。
  • Auto Braking:在终点是否会自动停下。
  • Priority:Agent的权重。

【3】用脚本操作NavMesh

接着实现一个简单的脚本,为Agent设定目的地即可。例如:

 1 public class NavMove : MonoBehaviour
 2 {
 3     public Transform goal;
 4     NavMeshAgent agent;
 5     void Start()
 6     {
 7         agent = GetComponent<NavMeshAgent>();
 8     }
 9     void Update()
10     {
11         agent.destination = goal.position;
12     }
13 }

对于更加复杂的功能以及其实现原理,可以通过Unity3D的官方文档查看。

 

posted @ 2019-05-08 17:29  Inkice  阅读(4028)  评论(0编辑  收藏  举报