日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁西西教程其它教程 → NavMesh尋路網(wǎng)格自動生成和動態(tài)障礙技術、Navmesh入門教程

      NavMesh尋路網(wǎng)格自動生成和動態(tài)障礙技術、Navmesh入門教程

      相關軟件相關文章發(fā)表評論 來源:西西整理時間:2013/11/13 15:31:13字體大小:A-A+

      作者:西西點擊:69次評論:0次標簽: NavMesh

      • 類型:磁盤工具大。18.8M語言:中文 評分:5.2
      • 標簽:
      立即下載

      在之前的自己寫的NavMesh網(wǎng)格尋路功能的基礎上,做了個尋路網(wǎng)格動態(tài)自動生成的功能,突破了Unity的自帶尋路不能動態(tài)生成尋路網(wǎng)格,一定要先break再用的缺點。

      用法很簡單,把可以走的地形設置成一個叫做“Walk”的標簽,然后不能走的地方設置成叫“cantWalk”的標簽,然后就什么都不用管了,直接運行即可。

      在沒有任何障礙物的情況下,就和之前的尋路一樣:

      然后直接添加一個cube,尋路就會繞過這個新增加的cube

      再增加一個,人物就會再繞過新的cube

      把路塞住,人物就繞開了路

      刪除中間的一個cube:

      然后人物就可以在中間通過了,就像魔獸里面的把樹滅掉之后,路就能通了

      去scene視窗看看,會發(fā)現(xiàn)現(xiàn)在的網(wǎng)格是這樣的:

      移動出來看看,這個就是我新生成的NavMesh了,其實這個東西純粹是為了讓大家看清楚才顯示出來的,沒什么實際意義的。

      繼續(xù)添加cube,網(wǎng)格就會動態(tài)變化,變成了這樣:

      到現(xiàn)在為止,這套屬于我自己的尋路系統(tǒng)就越來越有實用性了?梢詣討B(tài)生成mesh、可以用于各種平臺、隨便怎樣保存加載都可以。不過暫時還有些bug,還有些功能不太完善,以后有機會慢慢的改善吧。

      Navmesh入門教程:

      先來看看怎么在unity打開NavMesh功能的窗口吧:

      在window下拉列表中可以看到Navgation,點擊:

      在原來Inspector面板的旁邊會出現(xiàn)Navigation的面板:

      這個Objcet的面板是對應當前選擇的物體的,旁邊的Bake面板是對應全局選項的。結構和烘焙或者遮擋剔除是一樣的。在選擇了物體的情況下會出現(xiàn)上面的內容:

      上面的All、MeshRenderers、Terranis是對Hirarchy面板里面顯示的物品選擇的一個篩選過濾:

      all就是全部顯示

      MeshRenderers是只顯示可渲染的網(wǎng)格物體

      而Terrains當然就是只顯示地形物體了。

      下面的是重要的選項,第一個Navigation Static選項是選擇該物體是否用做尋路功能的一部分。只有勾選了這個選項,下面的其他選項才會可操作。

      OffMeshLink Generation選項是選擇該物體是否根據(jù)高度、可跳躍寬帶等全局的選項自動生成OffMeshLink,這個會在以后的講解中詳細說明,這次就暫時不討論。

      Navigation Layer是對參與尋路功能的地圖物體的一個分類,用層來分類,默認有三個層可以選擇,當然也可以自己添加層。

      在Edit下拉列表,選擇Project——NavMeshLayers

      出現(xiàn)了NavMesh層的管理界面: 

      上面三個Buit-in Layer是系統(tǒng)默認的三個可選擇層,我們可以在下面的User Layer里面輸入自己需要的層的名稱,比如我現(xiàn)在輸入一個叫做“brigde”的層

      這時候,剛才輸入的“bridge”層,就會出現(xiàn)在可選擇的列表里面

      通過剛才的幾步,NavMesh常用的幾個面板我們都已經(jīng)操作過了,接下來可以做一個小例子:

      在場景里面,我放了一個攝像機(Camera),一個充當?shù)孛娴拿嫫╬lane),一個角色模型(man)和一個目標點物體(target)

      為了便于觀察目標點的位置,我在目標點物體身上添加了Light組件讓它會發(fā)光。角色模型(man)身上必須添加NavMesh組件,不然就不能尋路了。為了方便,我使用了官方的大兵模型,里面已經(jīng)帶有了動畫和動畫控制的腳本。不過這些動畫的表現(xiàn)暫時是不重要的,你可以選擇放一個膠囊或者Cube代替人物的模型。

      還記得剛開始介紹的Navigation面板嗎?選擇地面(plane),在Navigation面板里面里面勾選Navigation Static選項,其他的默認不改動。

      然后點擊右下角的Bake面板。這時候會有一個計算的過程,曾經(jīng)用過烘焙或者遮擋剔除的朋友應該對這個過程很熟悉了。

      不過和之前兩個功能一樣,如果你沒有保存場景l(fā)evel,unity會提示你先保存,然后再bake。

      由于現(xiàn)在場景里面的物體很少,所以Bake的過程很快就結束了。

      留意看scene視窗,現(xiàn)在地面的顏色已經(jīng)發(fā)生改變了,這是因為unity已經(jīng)幫你生成了尋路用的NavMesh網(wǎng)格,由于現(xiàn)在沒有遮擋的阻礙物,所以整個地面都是屬于可以行走的范圍。

      寫一個最簡單的控制腳本吧,以上是C#,由于很簡單,估計用Js的朋友也能對應的寫出來。

      簡單的解釋一下,這個腳本是直接拖放到角色(man)身上的,并把場景中的目標物體(target)拖放指定到該腳本的target變量上面進行了賦值。在腳本一開始的時候,我 先獲取了man身上的NavMeshAgent腳本組件,然后在Update的過程中,man不斷的進行對target的位移的一個尋路并移動到目標位置的操作。

      在進行完以上的操作后,你應該已經(jīng)可以點擊unity的播放按鈕,然后移動目標物體(target),這時候角色模型已經(jīng)可以追著目標點跑了。

      這里我還做了一個簡單的鼠標點擊plane設定目標點的功能,由于這個功能不在這次的討論范圍內,所以有興趣的朋友可以自己去百度一下具體的方法。

      進行到這一步,人物已經(jīng)跑起來了,但由于沒有遮擋的障礙物,所以人物只是會直線的行走,看不出尋路的感覺。接下來我們就做點更復雜的:

      在場景里面添加一個Cube做為障礙物,具體的形狀和位置請根據(jù)自己喜歡來調節(jié),阿趙我是把它做成了一個長方形,并擺在了角色面前。

      和剛才對地面的操作差不多,選擇遮擋物Cube,在Navigation面板里面勾選Navigation Static選項,這次的Navigation Layer要選擇Not Walkable。顧名思義,這是不能行走的意思,代表了這個Cube是不能通過的。

      選擇完成后,我們再次點擊Bake,又是一個小等待的過程。

      Bake完成后,我們回到scene視窗。

      觀察scene視窗,會發(fā)現(xiàn)剛才整個地面都是NavMesh的情況已經(jīng)改變了,在障礙物的周圍,NavMesh留出了一個缺口,這代表了角色已經(jīng)不能從障礙物身上通過了。

      再次點擊unity的播放按鈕

      現(xiàn)在可以看到,人物已經(jīng)可以繞著障礙物走了,我們的目的已經(jīng)順利達到了。

      這次的例子就到此結束了。

        相關評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)