確定尋路者
烘培尋路路面
程序實現尋路算法
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);
}
}
用以上代碼進行測試結果如下:
因無法發布視頻,所以實際效果可按一下例子自行測試
紅色Cube為目標物體,黃色Sphere為尋路物體,圖中淺藍色路線為烘培的網格路線。
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