简单使用Unity导航系统(小白之路)
1.介绍
NavMesh:是一种根据场景中几何图像创建出来的3D网格。它会使导航和寻路变得很容易。
简单来说,NavMesh是一种我们在游戏世界中,可以让游戏角色在其表面行走并且导航的平面。
2.注意
这只对3D的环境有效。
显然,首先需要搭建环境场景。
这是我使用的场景:
3.现在来看看如何使用NavMesh
在你完成环境搭建后,从窗口菜单打开Navigation 窗口。
现在,选中你所有的环境组件并且确保Navigation菜单中的Navigation Static 这一项勾上了。
这里的,Navigation Static意味着在游戏运行期间,这个游戏对象不会移动
点击Bake按钮来创建NavMesh。你将会看到环境中覆盖有蓝色的一层表面。蓝色
的一层叫做可行走区域,也就是让我们的玩家或者敌人可以畅通无阻的地方。
你可以在Navigation 窗口的Bake标签下,通过调节参数来改变可行走的区域大小。
你可以使用这些参数,来设定可跨越高度,可穿行横切面最大值,可跨跃的距离等等。
4.敌人追踪玩家
这样,我们游戏中已经有了NavMesh了。现在看看怎样让角色在这些NavMesh上进行移动。
首先,从层级视图选中角色并从检视面板添加NavMesh Agent组件。
我建议,创建的角色最好是一个玩家和两个敌人。通过改变这些值你可以改变你角色导航的行为。
我用一个比较简单的移动脚本使敌人去追踪玩家 。
1 public class EnemyMovement : MonoBehaviour 2 { 3 Transform player; 4 // 获取玩家位置 5 6 NavMeshAgent nav; 7 // 获取NavMesh Agen't 8 9 void Awake () 10 { 11 // 引用赋值 12 player = GameObject.FindGameObjectWithTag ("Player").transform; 13 14 // 如果场景层级过多,建议不要使用 FindGameObjectWithTag的方法 15 // 鉴于这种情况,可以把玩家设置成公共变量,或者从检视面板中设置引用 16 17 nav = GetComponent <NavMeshAgent> (); 18 } 19 20 void Update () 21 { 22 // 设置目标为玩家的寻路代理的目的地 23 nav.SetDestination (player.position); 24 } 25}
这个脚本中我们需要着重注意的是NavMeshAgent所带的SetDestination()方法。如你所见我将这个函数放在了Update中执行,因为我们的玩家在持续地进行移动。
如果游戏中的目标不会改变他们的位置,那么你可以在Start函数中使用这个方法,或者在代码中任何其他适合你需求的地方使用这个方法。
然后剩下的就都交给NavMeshAgent去做了。
声明:本文章来自网络前辈所汇而成,有不懂的地方小白建议大家去原网址http://vr.99.com/news/06232017/011147334.shtml
版权声明:本文为Thor-zhiyin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。