转自:http://liweizhaolili.blog.163.com/blog/static/16230744201271210237616/blog
上一节简单介绍了NavMesh寻路的基本用法,此次来介绍一下稍微复杂一点点的高低落差以及跳跃的作法,首先来看看此次的目标:教程
因为博客相册上传GIF有限制,因此我把整个过程切开了2部分上传,第一部分是爬楼梯,第二部分是横向跳跃和往下跳落get
不论是爬楼梯,仍是跳跃,NavMesh都是经过了OffMeshLink来作的。建立OffMeshLink的方法有两种,接下来会经过制做上面的例子来进行说明:博客
按照上一节所讲的,plane和F1——F5台阶在Navigation面板勾选Navigation Static选项,而后Bake,观察Scene视窗,会发现已经生成了咱们所要的NavMesh网格,如今咱们能够像上一节那样在plane上面给人物作寻路和移动了,但人物是不会爬楼梯的。it
这时候,咱们找到L1楼梯,在楼梯的开始和结束的位置放置两个点,这两个点只须要拾取它的位移的,你能够用empty Gameobject来作,我这里为了便于观察,就拿了cube来作。开始点命名为startPoint,结束点命名为endPoint。io
注意:startPoint和endPoint的位置要稍微比所在的平面高一点点。入门
接下来介绍第一种生成OffMeshLink的方法。选择L1楼梯,而后在Component下拉选项中选择Navigation——Off Mesh Link。object
选择后,OffMeshLink组件已经添加到了L1的身上,咱们能够在Inspector面板看到:下载
咱们把刚才放置在场景里面的startPoint和endPoint指定到OffmeshLink组件的Start和End位置,其余选项默认不改变 方法
再次Bake
如今咱们发现,在scene面板里面,在startPoint和endPoint之间生成了一条线,而方向是从startPoint指向endPoint的。
这时候,你应该能够经过移动目标点让角色开始爬楼梯了。但爬上去以后角色暂时不能跳下来,若是把目标点移动到plane上,角色会顺着楼梯爬下来。
咱们使用一样的方法对L2进行生成OffMeshLink。这时候,角色应该能够爬两层楼梯了。到此第一个目标完成了。
接下来咱们进行第二个目标的制做,首先先来分析一下咱们的场景:
咱们但愿人物能从2.5M的高度往下跳,超过2.5M人物就不能跳了,过高会有危险。而后横向咱们但愿人物能跳过2米的沟。
根据这个设定,咱们的场景会是这样的状况:L1和L2只能经过爬楼梯,L2和L3之间能够跳跃,L3——L5是能够往下跳的。
因而,咱们在Navigation面板里面找到Bake栏,Drop Height(掉落高度)填2.5,Jump Distance(跳跃距离)填2,单位都是米
接下来介绍第二种生成OffMeshLink的方法:
咱们把L1——L5的物体选中,在Navigation面板的Object栏里面把OffMeshLink Generation选项打上勾
再次Bake,回到scene视窗:
这时候,场景里面会出现不少心的OffMeshLink,这是unity经过计算,把能够跳跃或者下落的地方自动生成了OffMeshLink了。
这时候,你应该已经能够经过移动目标点,让角色进行跳跃和下落了。
进行到这里,咱们的第二个目标也完成了。
不过有些朋友可能会提出疑问,在作的过程当中,假如没有这个大兵的模型,而是用一个胶囊体来代替人物的话,它爬楼梯和跳跃的时候好像是在一瞬间完成的,没有大兵那个爬楼梯和跳跃动做的过程。如这样:
假如各位须要对越过OffMeshLink时候进行本身的控制,是须要另外写脚本的。我这里简单的介绍一下方法,有兴趣的朋友能够本身试试。
首先各位最好有用状态来控制角色的概念。好比人物能够分为站立、走路、跑步、上下楼梯、横向跳跃和往下掉落几种状态,针对NavMesh来讲,人物简单的能够分为站立、正常的NavMesh寻路,和经过OffMeshLink移动几种状态。
先把 Auto Traverse Off Mesh Link选项取消。
而后,当人物在经过OffMeshLink移动的状态(能够用NavMeshAgent.isOnOffMeshLink来判断),获取到当前经过的OffMeshLink:
OffMeshLinkData link = NavMeshAgent.currentOffMeshLinkData;
这样你就能获取到link的开始点和结束点的坐标(link.startPos和link.endPos),这时候你的人物就能够用最简单的Vector3.Lerp来进行移动,当人物的位移到达告终束点的坐标,人物的OffMeshLink移动状态就能够结束,又从新变回正常寻路或者站立的状态了。在这个Vector3.Lerp的过程当中,你能够随意的控制人物的爬行或者跳跃的动做。
到这里,第二节的内容结束了。到如今,各位应该已经能够基本掌握了NavMesh寻路的所有正常操做了。接下来,我会在第三节里面简单讲解一下NavMesh的稍微复杂的控制方法,但愿你们继续支持阿赵。
顺带一提,可能不少朋友但愿我把工程文件提供下载。不过我以为这样并非一件好事,由于这几个例子都是很简单的操做,若是各位有耐心跟着阿赵一步步的作下来,应该能够获得你想要的结果。而若是没有耐心一步步的看下来,直接看工程文件,可能会忽略了不少重要的步骤的。