(一)Character Controller角色控制器組件
做過小Demo,讓游戲物體朝向鼠標(biāo)點(diǎn)擊的地面位置移動更舞,代碼如下:
public class charter : MonoBehaviour
{
private CharacterController c;
void Start ()
{
c = GetComponent<CharacterController>();
}
void Update ()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray,out hit ))
{
if (hit.collider.name.Equals("Cube"))
{
if (Input.GetMouseButton(0))
{
Vector3 p = hit.point-transform.position;
c.Move(p*Time.deltaTime*5f);
}
}
}
}
}
(二)Nav Mesh Agent:尋路、尋址
如果角色面前有障礙坎吻,鼠標(biāo)點(diǎn)擊到障礙物后邊缆蝉,如何移動瘦真,我們可以使用Nav Mesh Agent組件。
首先我們創(chuàng)建一個障礙物一個游戲?qū)ο蠛鸵粋€地面,然后我們給游戲?qū)ο筇砑覰av Mesh Agent組件和移動腳本
public class charter : MonoBehaviour
{
private NavMeshAgent c;
void Start()
{
c = GetComponent<NavMeshAgent>();
}
void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (!hit.collider.name.Equals("Plane"))
{
return;
}
Vector3 p = hit.point;
c.SetDestination(p);
}
}
}
然后我們我們設(shè)置地面和障礙物的靜態(tài)
然后我們再去給地面和障礙物烘焙,最后別忘記Bake哦
(三)Navigation導(dǎo)航
Object:物體參數(shù)面板
Navigation Static:勾選后表示該對象參與導(dǎo)航網(wǎng)格的烘培。
OffMeshLink Generation:勾選后可跳躍(Jump)導(dǎo)航網(wǎng)格和下落(Drop)焚志。
Bake:烘培參數(shù)面板
Radius:具有代表性的物體半徑酱酬,半徑越小生成的網(wǎng)格面積越大云矫。
Height:具有代表性的物體的高度让禀。
Max Slope:斜坡的坡度。
Ste Height:臺階高度痛阻。
Drop Height:允許最大的下落距離阱当。
Jump Distance:允許最大的跳躍距離。
Min Region Area:網(wǎng)格面積小于該值則不生成導(dǎo)航網(wǎng)格录淡。
Width Inaccuracy:允許最大寬度的誤差嫉戚。
Height Inaccuracy:允許最大高度的誤差免钻。
Height Mesh:勾選后會保存高度信息极舔,同時會消耗一些性能和存儲空間拆魏。
(四)offMeshLink:從網(wǎng)鏈接
屬性:
開始 (Start) 分離網(wǎng)格鏈接的開始對象渤刃。
結(jié)束 (End) 分離網(wǎng)格鏈接的結(jié)束對象卖子。
成本覆蓋 (Cost Override) 如果值為正洋闽,則在路徑請求處理中計算路徑成本時使用該屬性突梦。否則宫患,我們使用默認(rèn)成本(此游戲?qū)ο笏鶎俚膶拥某杀荆H绻俺杀靖采w”(Cost Override) 設(shè)置為值 3.0虚汛,則在分離網(wǎng)格鏈接上移動的成本比在默認(rèn)導(dǎo)航網(wǎng)格區(qū)域中移動相同距離的成本高三倍卷哩。 此屬性可在運(yùn)行時編輯殉疼,無需重新烘焙''
雙向 (Bi Directional) 如果此屬性為“開”(on),則可以雙向穿越鏈接挂洛,如果它為“關(guān)”(off)眠砾,則只能按從“開始”(Start) 到“結(jié)束”(End) 的方向穿越鏈接褒颈。
已激活 (Activated) 指定尋路器是否實(shí)際使用此鏈接。此屬性可在運(yùn)行時編輯堡掏,無需重新烘焙泉唁。
如何從一個地面跳躍到另一個地面
首先我們在創(chuàng)建另一Plane(1)亭畜,然后在第一個Plane上添加Off Mesh Link上并且將兩個地面連接起來迎卤,然后我們給新添加的地面也添加今天值蜗搔,再然后我們給新添加的地面也烘焙好
然后我們在烘焙界面Bake上修改其距離
這樣我們就完成了
(五)Nav Mesh Obstacle
在導(dǎo)航網(wǎng)格上的固定障礙物,可以作為烘焙過程中的一部分設(shè)置不同。
但是二拐,也可能在場景具有動態(tài)阻擋物,這將通過Agent移動來避開企软。
這種動態(tài)障礙物仗哨,可以指定Navmesh Obstacle組
可以被添加任何游戲物體上并隨該對象移動。
Radius 半徑 : 障礙物圓柱的半徑
Height 高度 : 障礙物圓柱的高度
Carve:是否打開在導(dǎo)航網(wǎng)格挖洞的模式
Move Threshold:當(dāng)模式為Carve時萨醒,此物體的移動距離超過這個閥值后苇倡,更新當(dāng)前的導(dǎo)航網(wǎng)格(重新挖洞)