Unity-創(chuàng)建導(dǎo)航網(wǎng)格代理
為關(guān)卡烘焙導(dǎo)航網(wǎng)格后,即可創(chuàng)建能夠在場(chǎng)景中導(dǎo)航的角色了。我們將使用圓柱體構(gòu)建原型代理,并將代理設(shè)置為運(yùn)動(dòng)狀態(tài)。為實(shí)現(xiàn)此目的,需要使用導(dǎo)航網(wǎng)格代理 (NavMesh Agent) 組件和簡(jiǎn)單腳本。

首先,讓我們創(chuàng)建角色:
創(chuàng)建一個(gè)圓柱體:__GameObject > 3D Object > Cylinder。
默認(rèn)的圓柱體尺寸(高度 2 和半徑 0.5)適用于人形代理,因此我們將這些尺寸保持原樣。
添加一個(gè)導(dǎo)航網(wǎng)格代理組件:__Component > Navigation > NavMesh Agent。
現(xiàn)在已設(shè)置簡(jiǎn)單的導(dǎo)航網(wǎng)格代理來(lái)準(zhǔn)備接收命令!
開(kāi)始嘗試使用導(dǎo)航網(wǎng)格代理時(shí),很可能需要根據(jù)角色大小和速度調(diào)整代理的尺寸。
__導(dǎo)航網(wǎng)格代理__組件將負(fù)責(zé)角色的尋路和移動(dòng)控制。在腳本中,導(dǎo)航的設(shè)置十分簡(jiǎn)單,只需設(shè)置所需的目標(biāo)點(diǎn):導(dǎo)航網(wǎng)格代理可從此處進(jìn)行所有內(nèi)容的處理。
? ?// MoveTo.cs
? ? ? ?
using UnityEngine;
? ? ? ?
using UnityEngine.AI;
? ?
? ? ? ?
public class MoveTo : MonoBehaviour {
? ? ?
? ? ? ? ??
public Transform goal;
? ? ?
? ? ? ? ??
void Start () {
? ? ? ? ? ? ?
?????NavMeshAgent agent = GetComponent<NavMeshAgent>();
? ? ? ? ? ? ?????agent.destination = goal.position;
? ? ? ? ??
????}
}
接下來(lái),我們需要構(gòu)建一個(gè)簡(jiǎn)單的腳本,通過(guò)此腳本可將角色發(fā)送到另一個(gè)游戲?qū)ο笾付ǖ哪繕?biāo),并構(gòu)建一個(gè)用作移動(dòng)目標(biāo)的球體:
創(chuàng)建一個(gè)新的?C# 腳本?(
MoveTo.cs
) 并將其內(nèi)容替換為以上腳本。將 MoveTo 腳本分配給剛剛創(chuàng)建的角色。
創(chuàng)建一個(gè)球體,此球體將用作代理移動(dòng)到的目標(biāo)。
將球體從角色移動(dòng)到靠近導(dǎo)航網(wǎng)格表面的位置。
選擇角色,找到 MoveTo 腳本,并將球體分配給?Goal?屬性。
按 Play;您應(yīng)該會(huì)看到代理導(dǎo)航到球體的位置。
總而言之,在腳本中,您需要獲取對(duì)導(dǎo)航網(wǎng)格代理組件的引用,然后為了將代理設(shè)置為運(yùn)動(dòng)狀態(tài),只需將一個(gè)位置分配給其?destination?屬性。導(dǎo)航操作方法部分提供了進(jìn)一步的一些示例來(lái)說(shuō)明如何使用導(dǎo)航網(wǎng)格代理解決常見(jiàn)的游戲問(wèn)題。