大家好,我是优就业的小优,又和大家见面了。
今天我们一起来学习Unity中的导航网格代理组件,这个组件的作用就和它的名字一样是用来进行自动寻路。它会帮我们在游戏场景中生成一块区域,哪里可以通行,哪里无法通行,便于游戏角色在场景中自动寻路,完成场景漫游。在游戏中,经常会有这样的场景,玩家进入副本时,怪物会自行规划最优路径,避开障碍物,找到玩家位置,进行攻击。角色在做任务时,玩家只需要点击任务,角色就会自动寻路过去。
需要注意的是,它只对3D环境有效,所以我们首先搭建需要使用的场景,下图中创建的Plane就是我所使用的场景。
现在来看看如何使用导航也就是NavMesh,在完成场景搭建后,从窗口菜单选择Navigation,会弹出一个如下图所示的面板,它就是我们的NavMesh导航网格。
Agent Radius:定义网格和地形边缘的距离
Agent Height:定义可以通行的最高度
Max Slope:定义可以爬上楼梯的最大坡度
Step Height:定义可以登上台阶的最大高度
Drop Height:允许最大下落距离
Jump Distance:允许最大的跳跃距离
在Bake(烘焙场景)之前一定要确定勾选Static
其实就是确保Static下勾选了Navigation Static,这里的Navigation Static意味着在游戏运行期间,这个游戏对象不能移动。
可以根据自行的需要去设置参数,设置好参数之后点击Bake(烘焙场景),等到烘焙完毕会看到场景中覆盖一层蓝色的表面,蓝色的一层叫做可行走区域,也就是让玩家和敌人能够运动的区域。
此时,游戏当中已经有了NavMesh了,接下来去实现让玩家运动的功能,要想让玩家运动,我们可以通过一个组件叫NavMeshAgent组件,它是用来控制物体在NavMesh上移动,创建一个Cube作为玩家,为其添加NavMeshAgent组件。
Speed:最大移动速度
Angular Speed: 运动时的最大角速度
Acceleration:最大加速度,控制速度的快慢变化
Stopping Distance:制动距离,到达目标点的距离小于这个值
Auto Braking:勾选,到达目标点后停止运动,没有缓冲运动
要想让物体移动,需要给物体一个移动目标点,所以在场景中创建一个Point,作为目标点。
准备工作已经完毕,给Cube添加脚本CubeMove,编写让其移动的代码。
只需要简单的六行代码就可以实现自动寻路功能,是不是很简单啊。