Unity3D中自动寻路的功能:
概述:
别人写的教程,非常详细,细节我就不赘述了。只写一些自己的总结:
1. 什么是导航网格:
“导航网格”,规定了使用自动寻路的GameObject所能或者不能通过的地方。
2. 如何生成导航网格:
菜单栏: Window——Navigation,打开导航网络控制面板。
选择想要生成网格的游戏物体,比如一个Plane,在”导航网格控制面板“中将“Navigation Static”打钩,点击右下角的Bake,烘焙路径,则可以看到自动生成的区域。Navigation Area则决定了这个区域是Walkable还是not Walkable或者是Jump。
3. 如何应用导航网格:
在自己的Player上添加一个“Nav Mesh Agent”组件,这个组件实现了自动寻路的功能,可以看做是一个封装。设计者只要使用这个组件就好了,具体可以看官方说明。
举个例子:
using UnityEngine;
using System.Collections;
public class SetHeroDes : MonoBehaviour
{
public Transform ds;//用来确定目的地坐标的游戏物体的Transform
private Vector3 origin;//存储导航网格代理的初始位置
private NavMeshAgent nma;//存储导航网格代理组件
void Start()
{
nma = gameObject.GetComponent<NavMeshAgent>(); //取得导航网格代理组件
origin = transform.position; // 存储一下这个脚本所挂载游戏物体的初始位置
nma.SetDestination(ds.position); // 关键点:操作NavMeshAgent组件,设置自动寻路的目标位置为我们通过ds所指定的点。
}
}
把这个脚本挂到想要自动寻路的游戏物体,并指定目标位置游戏物体。
简单粗暴有木有?
nma.SetDestination(ds.position);
这句代码设置后,所挂载该脚本的游戏物体就开始依据我们通过Bake生成的导航网格自动寻路了。这个过程中,会自动绕过障碍物(通过Bake将这类游戏物体烘焙为not walked)。
4. OffMeshLink是什么?
按照我的理解,这个组件提供了不同的高度和导航网格中断的处理方案,详情看教程吧。
下面是别人教程的地址,非常详细:
有些教程里面的素材如果没有,通通用cube代替,学到东西才是真的。我看这些教程时,由于是几经转载,都看不到图的,就自己随便弄个cube,Metrial之类的搞完再说。