在游戲制作中,我們經常會用到角色自動尋路這個功能,點擊小地圖或者場景中的某一處時,角色會自動走向目的地,并且自動避開期間的障礙物。而在Unity中,有多種方法能夠實現(xiàn)尋路的功能,下面就給大家介紹下這幾種方法。
(一)簡單尋路
首先選擇需要行走的路塊進行烘焙,(點擊最上方的Windows 下拉菜單的 Navigation )出現(xiàn)以下界面。
選中需要烘焙的路面以及物體,打上紅勾,可以行走的區(qū)域選擇Walkable,不可行走的選擇Not Walkable。
選擇完成后,點擊右下角的Bake,即可烘焙完成。
烘焙完成也就完成了我們的第一步了。
在需要尋路的人物上,加上自動尋路Nav Mesh Agent組件,接下來再寫個簡單的小腳本,就可以讓我們的人物動起來啦。
public NavMeshAgent Nav_Npc; <span style="color:#009900;">//NPC人物 </span> public Transform Tra_Target; <span style="color:#009900;">//目標點 </span> private void Update() { <span style="color:#009900;"> //點擊鼠標,使NPC到達鼠標點擊位置 </span> RaycastHit hit; if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { //SetDestination()函數(shù):設置或者更新目的地并計算新的行走路徑。 Nav_Npc.SetDestination(hit.point); } } }
(二)使用Off Mesh Link 連接組件,做一個跳板,使NPC可以經過跳板AB,來到達目標點。
下面就說一下方法吧,中途遇到個小Bug,搞了好幾次終于搞定了。
步驟同(一)。不同的是我們需要在A或B上加一個Off Mesh Link 連接組件,然后將A、B起始點拖拽如組件中即可。然后我們再把需要走的地方烘焙一下,(A、B、地方、大方塊)。
注:遇到的Bug:A、B方塊不能太大?。?!不然就導致我們的小人跳不上去啦。(這個Bug很詭異發(fā)火)
(三)選擇路段行走
使A、B各沿著自己的路線行走。
其實也很簡單,下面來解說一下。
還是在Navigation界面,選擇Areas給紅藍兩條路添加自定義標簽,
然后返回Obj界面,選擇紅色道路對應標簽(以紅色為例)
然后選擇紅色小人,更改組件中的Area Mask,可以走哪條線路,就勾那個。接下來烘焙一下,就可以運行來,會發(fā)現(xiàn)紅色只走紅色道路到達對面。
(四)障礙物組件
NavMeshObstacle 導航網格障礙
導航網格躲避的障礙。
下面圣典的解釋,再添加一些自己的話,使其比較容易理解。
障礙僅影響代理的躲避行為而不是尋路。這意味著當測繪路徑時代理將會忽略該障礙,但是沿著路徑移動時代理將會在障礙的附近回避。
如果啟用carving,因此測繪路徑時將會避免該障礙。(可以理解為沒有烘焙此障礙物,不能通過?!緦嶋H事實是烘焙過的】)這意味著如果說障礙阻塞缺口,尋路將會尋找一個替代路線給目標。(也就是繞行)。
沒有啟用carving,障礙將會在導航網格上創(chuàng)建一個臨時的“門”(路徑是已被烘焙過的,但門是關著的)。該缺口(門)將會被尋路認可,代理將會朝缺口前進但是不可能通過缺口直到該障礙被清除。 (設置enable = flase,即障礙物清除)