自动寻路是很多游戏必备的功能之一(虽然以前玩网游很多人都吐槽国产网游的自动寻路和挂机是很蠢的功能233)。这个功能可以帮助我们在各式各样的场景中实现点击屏幕就控制角色到达指定的地点。如图
NavMeshComponents是Unity官方提供的一款插件,可以用来实现我们所需要的自动寻路功能,github地址。大家下载好后,里面有很多的demo供大家学习,今天就和小伙伴们一起入门。
百看不如一试,我们先自己建个空场景,来模拟Demo1的情况。
1.首先我们要建立一个场景,里面有各式各样的路障,越帅越好。然后建立两个圆柱体伪装角色。两个角色可以设置不同的高度和宽度,场景的障碍物之间的路口也可设置不同的宽度和高度,用来模拟。
其中我设置的Player1为红色的默认圆柱体,scale(1,1,1),即半径为0.5,高度为2。Player2为绿色的圆柱体,scale(1.5,0.8,1.5),即半径0.75,高度1.6。然后其中左下角带顶的通道,高度为1.9
2.给要移动的物体添加NavMeshAgent组件,并设置相关参数。与添加ClickToMove组件
我们给Player1和2分别添加NavMeshAgent组件,并在Agent Type选项中,选择Open Agent Settings...打开设置界面。添加两个新的Agent Type分别为Player1和Player2。通俗的讲,Radius即为物体半径,Height为物体高度,Step Height的高度指能上去的最大高度(类似于上台阶),Max Slope即为能上去的最高陡度(类似于上斜坡),这两个参数小伙伴们可以自行在场景中添加斜坡和台阶进行测试。根据自己设置玩家物体的参数设置好即可,然后为Player12选好对应的Agent Type。
至于其他的参数含义,大家可以看这个网页自行参考:http://wiki.ceeger.com/script/unityengine/classes/navmeshagent/navmeshagent?s[]=navmeshagent
接着要添加demo中自带的ClickToMove,里面的逻辑也很简单,就是通过射线的原理,将鼠标点击的坐标设为NavMeshAgent的目的地。
3.给场景添加NavMeshSurface组件
接下来就是最后一步了,我们给我们的场景Ground添加NavMeshSurface组件,因为场景中有两个属性不一样的NavMeshAgent,所以我们也需要添加两个NavMeshSurface进行对应,如图
选择好Agent Type后,我们点击Bake即可。
上面的操作都搞好以后,我们就可以运行该工程了体验最简单的自动寻路了。设置好NavMeshAgent的物体会自动移动到鼠标点击的区域。