您的位置:首页 > 移动开发 > Unity3D

Unity3D中的自动寻路

2017-01-07 18:31 441 查看
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之类的搞完再说。

Unity里面的自动寻路(一)

Unity里面的自动寻路(二)

unity自带寻路Navmesh入门教程(一)

unity自带寻路Navmesh入门教程(二)

unity自带寻路Navmesh入门教程(三)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息