轉自: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的稍微複雜的控制方法,但願你們繼續支持阿趙。
順帶一提,可能不少朋友但願我把工程文件提供下載。不過我以爲這樣並非一件好事,由於這幾個例子都是很簡單的操做,若是各位有耐心跟着阿趙一步步的作下來,應該能夠獲得你想要的結果。而若是沒有耐心一步步的看下來,直接看工程文件,可能會忽略了不少重要的步驟的。