Unity3D 尋路系統

2021-01-14 Unity3D遊戲開發精華教程乾貨
一、尋路方式二、實現尋路方法

確定尋路者

烘培尋路路面

程序實現尋路算法

1、實現尋路步驟

將場景中不動的物體勾選static

烘培尋路網格
Unity2019:打開window->AI->Navigation面板;如下圖

點擊Bake完成網格路面的烘培。

給需尋路的物體添加NavMeshAgent組件(Unity主要通過NavMeshAgent組件實現自動尋路的功能,角色添加NavMeshAgent組件後,就可以在NavMesh尋路網格上尋找最優路徑找到目標)
選中物體,然後在屬性面板中點擊Add Component,搜索Nav Mesh Algent,添加此組件。

給需要尋路的物體添加腳本

public class FindWayByNav : MonoBehaviour
{
public Transform target;
private NavMeshAgent nav;
private void Start()
{
nav = this.GetComponent<NavMeshAgent>();
//SetDestination方法即為尋路方法,參數為目標物體的三維向量
nav.SetDestination(target.position);
}
}

2、代碼測試

用以上代碼進行測試結果如下:
因無法發布視頻,所以實際效果可按一下例子自行測試

紅色Cube為目標物體,黃色Sphere為尋路物體,圖中淺藍色路線為烘培的網格路線。

三、關於Navigation中屬性的介紹

https://docs.unity3d.com/Manual/class-NavMeshAgent.html

四、組件Nav Mesh Obstacle的使用

http://docs.unity3d.com/Manual/class-NavMeshObstacle.html

五、組件Off Mesh Link的使用

當尋路物體需要到另一個地面時,而兩個地面之間沒有連接,那麼在進行烘培網格路面時,並不會將兩個路面上的網格路面連接起來,那麼如圖(忽略障礙物體)所示,
尋路物體就不能夠到達另一塊地面到達目標物體身邊。

為解決此問題,有兩種解決方案:
(1)、在兩塊路面之間再加一個面板,進行網格路面的烘培即可。
(2)、使用Off Mesh Link組件進行實現。
Off Mesh Link的使用方法:在兩塊路面上,分別添加兩個空的物體,並為其中一個物體添加此組件,再設置此組件的屬性,起始點和目標點,再進行網格路面的烘培即可,實際效果如下:

注意:兩邊地面上進行連接的點不能在烘培的藍色網格之外,否則無效,且兩點間的弧線為不加粗的!
溫馨提示:使用此組件無法調節物體在兩點間移動的速度,如需調節速度,建議使用第一種方法。

六、用代碼實現勾選不同的尋路區域

GetComponent<NavMeshAgent>().areaMask=8;
尋路區域每一個區域都是2的冪,如下圖所示,通過冪的數值進行設置

若是想要選擇多條路徑,則將冪的數值進行相加再賦予areaMask即可。

Everything->-1,Nothing->0

七、注意問題


聲明:發布此文是出於傳遞更多知識以供交流學習之目的。若有來源標註錯誤或侵犯了您的合法權益,請作者持權屬證明與我們聯繫,我們將及時更正、刪除,謝謝。

作者:Studious_S

原文:https://blog.csdn.net/Studious_S/article/details/106177998


More:【微信公眾號】 u3dnotes



相關焦點

  • 博主營地 | Unity3D 實用技巧 - 理論知識庫(一)
    原生GUI:http://unity3d.9ria.com/?p=2587  NGUI:http://blog.csdn.net/mfc11/article/details/17681429  為什麼dynamic font在unicode環境下優於static font。
  • Unity 實用技巧 - 物理系統初識
    官方文檔:https://docs.unity3d.com/Manual/PhysicsSection.html01  Rigidbody(剛體)/ Rigidbody2D(2D剛體)在使用文檔連結:https://docs.unity3d.com/cn/current/Manual/PhysicsDebugVisualization.html最後,小編特別推薦一些其他大神分享的內容。
  • 使用Unity 粒子系統實現 2D 人物足跡效果
    之後深入一想腳本大概要怎麼寫,感覺頭大的不行,又想到了 Hierarchy 裡面被 FootStep12345678 塞得滿滿當當的壯麗場面..還是換個方法吧 轉念一想:unity 的粒子系統似乎可以滿足所有特性:生成淡出銷毀全自動,跟隨人物也是基本操作,比較存疑的就是用腳本控制粒子的鏡像與旋轉。
  • 2021新年匯總:Unity項目原型快速開發資源,看這一篇就夠
    /publishers/102  完整項目: 3D Game Kit : https://assetstore.unity.com/packages/templates/tutorials/3d-game-kit-115747
  • 簡化AR體驗創作,Unity MARS Query系統程序化生成場景的原理
    Unity MARS資料庫:  https://docs.unity3d.com/Packages/com.unity.mars@1.1/manual/MARSConcepts.html#the-mars-database  每條數據都以稱為數據ID(data ID)的一串數字做區分,每條數據又能包含任意數量的特徵(traits),即帶名稱的特定數據類型
  • Unity約你來剁手啦!
    Unity Pro專業版促銷詳情:https://create.unity3d.com/big-fall-sale-cnUnity Plus加強版5折,折後價120元/月,不含稅。免費贈送價值300美金的2個資源工具包,內含多款實用Asset Store上實用資源插件。免費贈送1個Unity限量背包!
  • 【官方說明】Unity 5 引擎專業版和個人版解析
    下載:Unity 5 Personal Edition(個人版)和Professional Edition(專業版)今天可在 http://unity3d.com/cn/get-unity 立即下載。提問:如您有任何問題請在中文官方論壇中參與討論,或者聯繫:chinasales@unity3d.com
  • Unity項目開發過程中常見的問題,你遇到過嗎?
    最近看到有朋友問一個unity遊戲開發團隊,需要掌握哪些知識之類的問題。
  • Unity2018新功能搶鮮 | 粒子系統改進
    洪流學堂,讓你學Unity快人幾步Unity2018.1中對粒子系統進行了重大改進,包括功能、性能很多方面,快來看看吧!GPU網格實例化粒子系統現在支持GPU實例化來渲染網格。粒子系統使用Procedural Instancing,可以在此處詳細解釋:https://docs.unity3d.com/Manual/GPUInstancing.html實例化支持已添加到「Particle Standard Shaders」中,並將在所有新內容中默認啟用。舊版內容升級到Unity 2018.1後,可以使用Renderer模塊中的複選框啟用GPU實例化。
  • unity 半透明渲染技巧(3則)
    unity 半透明渲染技巧(1):固定深度法半透明渲染排序問題 長期在各種3d引擎存在,這裡將一些針對性技巧。
  • Unity粒子系統小技巧X1
    幾個方法都是用unity粒子系統裡面的Velocity over lifetime(不知道這是什麼的去學基礎課)第一個方法這個speed modifier呢,好像是17.3版本才更新的,反正我之前17剛出的時候做粒子系統註解的時候是沒看到的23333 功能呢類似百分比調節速度吧
  • 【大咖專欄】Unity AR Foundation 平面檢測實戰
    禁用ARSession將停止AR系統的各種檢測運算。ARSession提供了一個靜態的協程方法CheckingAvailability,可以查詢設備是否支持AR。下面的代碼自定義一個腳本組件用來查詢設備是否支持AR,注意Start函數的返回值修改為IEnumerator,以實現異步查詢。
  • Unity 2018.3 Beta版發布
    直播課程:Facial AR Remote面部捕捉解決方案課程(第一期)直播地址:https://connect.unity.com/events/unitychina-facialarUnity官方教師培訓報名火熱進行中Unity將在10月22-26日,舉辦為期5天的專業的Unity官方教師培訓課程,誠邀廣大教師與
  • unity什麼意思
    unity什麼意思uni前綴,只包含一個的,更多例子還有:uniform, unique, unilateral, etc. 發音類似於有你,整個世界中有你就夠了,不需要別人,也就是只包含一個的。unity,聯合、統一、團結、和睦。學單詞,只記住意思可不行,會用才行,小夥伴們可以在評論區造句,我們一起學習哦!我先來:造句:Unity is strength. (團結就是力量)
  • 尋路者:阿拉伯科學的黃金時代
    通過《尋路者:阿拉伯科學的黃金時代》與讀者諸君分享一段非凡有趣的故事,是因為我相信,現在來探討西方文化和科學思想在多大程度上受惠於千年前的阿拉伯、波斯、伊斯蘭教、基督教和猶太教的思想家以及科學家的成果恰逢其時,也更能引起人們的共鳴。
  • 峰瑞資本講述:我們為什麼領投Unity 1.81 億美金C輪融資?
    Unity 功能強大的圖形引擎和全面的編輯器是開發優質遊戲和應用程式的重要基礎,並且可以支持它們在諸如行動裝置、家用娛樂系統、個人電腦以及嵌入式系統等平臺上發布運行。更多詳情請移步 unity3d.com。更多遊戲體驗可移步 madewith.unity.com 。雷鋒網註:本文來自峰瑞資本,轉載請聯繫授權並註明出處,不得刪減內容。 雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。
  • 在unity中用C#連接資料庫步驟
    所以本文就介紹一下unity連MySQL資料庫所遇到的一些坑。unity連接資料庫,首先你需要導入如圖所示的五個數據連結庫。在本圖中,歐陽講他們放到了Mysql文件夾下,在這裡歐陽強調一下――最好將他們放到Plugins文件夾下,不然會出現莫名其妙的問題哦。
  • Unity官方示例:在ARCore和ARKit中實現多人遊戲
    要想把現實場景添加到AR中,你需要將設備攝像機的畫面渲染為編輯器場景中攝像機的背景:public abstract void SetupCamera(Camera camera);把你需要顯示視頻背景的Unity攝像機作為參數傳入,系統會自動完成設置。
  • unity實戰之大主宰
    然後回到unity,點擊windows ->package manager,就能找到自己的資源,全部import這裡是獲取場景後的結果:(如果有許多個對象是相同的,系統會重複加載,耗時)而且有許多對象是在遊戲中途才生成的。為了遊戲流暢性,在開始就要加載,但是不顯示,這種簡單加載做不到。