导航系统中介绍了导航的基本用法,但是不能解决分离路面导航问题。如下图,胶囊体需要导航到立方体位置,但是路面不连续,烘焙(Bake)导航网格后,断开处也没有导航网格,因此,胶囊体导航到分离路面边界处就会停下来。

角色在分离路面边界处,存在两种行为:1. 水平跳,2. 往下跳或往上跳。Unity3D 针对这两种情况提供了对应的解决方案:
说明:水平跳场景下,也可以使用添加 OffMeshLink 组件方式;往下跳或往上跳场景下,不能使用勾选 Generate OffMeshLinks 属性方式。
1)游戏界面

2)设置 Navigation Static、Generate OffMeshLinks
依次选择【Window→Navigation】打开导航窗口,再选择 Object 选项卡,选中两个地面,勾选 Navigation Static、Generate OffMeshLinks,如下:

3)烘焙导航网格
切换到 Bake 选项卡,设置 Max Slope、Step Height、Drop Height、Jump Distance 属性如下:

点击 Bake 烘焙导航网格,导航网格显示如下:

其中,浅蓝色表示导航可以走的区域,中间的连接线表示导航跨越线。
4)添加 NavMeshAgent 组件
给胶囊体添加 NavMeshAgent 组件。
5)添加脚本组件
NavigationController.cs
- using UnityEngine;
- using UnityEngine.AI;
-
- public class NavigationController : MonoBehaviour {
- private NavMeshAgent navMeshAgent;
- private Transform target;
-
- private void Awake() {
- navMeshAgent = GetComponent<NavMeshAgent>();
- target = GameObject.Find("Target").transform;
- }
-
- private void Update() {
- navMeshAgent.SetDestination(target.position);
- }
- }
cs运行
说明:Target 是小立方体, NavigationController 脚本组件挂在胶囊体上。
6)运行效果

在分离路面边界处往下或往上跳的场景,使用 Generate OffMeshLinks 方法,在边界处仍然无法烘焙出导航连接线,此时需要使用到 OffMeshLink 组件。
1)游戏界面

2)设置 Navigation Static
依次选择【Window→Navigation】打开导航窗口,再选择 Object 选项卡,选中两个地面,勾选 Navigation Static,如下:

3)添加 OffMeshLink 组件
在分离路面边界处创建 2 个空对象,并重命名为 Start、End,给 Start 添加 OffMeshLink 组件,并将 Start、End 拖拽到 OffMeshLink 组件中,如下:

补充:由于空对象不可见,为方便调整空对象位置,可在 Inspector 窗口给空对象设置 Icon。
4)烘焙导航网格
Navigation 窗口切换到 Bake 选项卡,点击 Bake 烘焙导航网格,可以看到 2 个空对象之间有一条连接线。

5)添加 NavMeshAgent 组件和脚本组件
同第 2 节。
6)运行效果

武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...