茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1675150 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00064.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2015/3/27 10:49:22

上一節簡單介紹了NavMesh尋路的基本用法,這次來介紹一下稍微複雜一點點的高低落差以及跳躍的做法,首先來看看這次的目標:

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙
unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

由於博客相冊上傳GIF有限制,所以我把整個過程切開了2部分上傳,第一部分是爬樓梯,第二部分是橫向跳躍和往下跳落

不管是爬樓梯,還是跳躍,NavMesh都是通過了OffMeshLink來做的。創建OffMeshLink的方法有兩種,接下來會通過製作上面的例子來進行說明:


unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙
為了做這個例子,我們預先在場景裡面準備了一些物體:攝像機是必須的,一個作為地面的Plane,然後是F1——F5幾個高低落差不一樣的台階,L1和L2是樓梯模型, 控制人物主體man,還有移動的目標點target。
其中man身上必須帶有NavMesh Agent組件,為了觀察方便在target身上帶了light組件。
unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

按照上一節所講的,plane和F1——F5台階在Navigation面板勾選Navigation Static選項,然後Bake,觀察Scene視窗,會發現已經生成了我們所要的NavMesh網格,現在我們可以像上一節那樣在plane上面給人物做尋路和移動了,但人物是不會爬樓梯的。

這時候,我們找到L1樓梯,在樓梯的開始和結束的位置放置兩個點,這兩個點只需要拾取它的位移的,你可以用empty Gameobject來做,我這裡為了便於觀察,就拿了cube來做。開始點命名為startPoint,結束點命名為endPoint。


unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

注意:startPoint和endPoint的位置要稍微比所在的平面高一點點。

接下來介紹第一種生成OffMeshLink的方法。選擇L1樓梯,然後在Component下拉選項中選擇Navigation——Off Mesh Link。

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

選擇後,OffMeshLink組件已經添加到了L1的身上,我們可以在Inspector面板看到:

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

我們把剛才放置在場景裡面的startPoint和endPoint指定到OffmeshLink組件的Start和End位置,其他選項默認不改變

再次Bake


unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

現在我們發現,在scene面板裡面,在startPoint和endPoint之間生成了一條線,而方向是從startPoint指向endPoint的。

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

這時候,你應該可以通過移動目標點讓角色開始爬樓梯了。但爬上去之後角色暫時不能跳下來,如果把目標點移動到plane上,角色會順著樓梯爬下來。

我們使用同樣的方法對L2進行生成OffMeshLink。這時候,角色應該可以爬兩層樓梯了。到此第一個目標完成了。

接下來我們進行第二個目標的製作,首先先來分析一下我們的場景:


unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

我們希望人物能從2.5M的高度往下跳,超過2.5M人物就不能跳了,太高會有危險。然後橫向我們希望人物能跳過2米的溝。

根據這個設定,我們的場景會是這樣的情況:L1和L2只能通過爬樓梯,L2和L3之間可以跳躍,L3——L5是可以往下跳的。

於是,我們在Navigation面板裡面找到Bake欄,Drop Height(掉落高度)填2.5,Jump Distance(跳躍距離)填2,單位都是米

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

接下來介紹第二種生成OffMeshLink的方法:

我們把L1——L5的物體選中,在Navigation面板的Object欄裡面把OffMeshLink Generation選項打上勾

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙


再次Bake,回到scene視窗:

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

這時候,場景裡面會出現很多心的OffMeshLink,這是unity通過計算,把可以跳躍或者下落的地方自動生成了OffMeshLink了。

這時候,你應該已經可以通過移動目標點,讓角色進行跳躍和下落了。

進行到這裡,我們的第二個目標也完成了。

不過有些朋友可能會提出疑問,在做的過程中,假如沒有這個大兵的模型,而是用一個膠囊體來代替人物的話,它爬樓梯和跳躍的時候好像是在一瞬間完成的,沒有大兵那個爬樓梯和跳躍動作的過程。如這樣:

unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙
unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

的確是這樣,因為默認的NaveMesh Agent組件上面是勾選了Auto Traverse Off Mesh Link(自動通過OffMeshLink)選項的。這樣的意思是人物只要到了OffMeshLink的開始點,就會自動的移動到OffMeshLink的結束點。
unity自帶尋路Navmesh入門教程(二) - 阿趙 - 有爪的小羔羊阿趙

假如各位需要對越過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的稍微複雜的控制方法,希望大家繼續支持阿趙。

順帶一提,可能很多朋友希望我把工程文件提供下載。不過我覺得這樣並不是一件好事,因為這幾個例子都是很簡單的操作,如果各位有耐心跟著阿趙一步步的做下來,應該可以得到你想要的結果。而如果沒有耐心一步步的看下來,直接看工程文件,可能會忽略了很多重要的步驟的。


原文出處:unity自带寻路Navmesh入门教程(二) - 阿赵的日志 - 网易博客
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|