測試尋路系統(tǒng)
首先我們來到岡姆的堡壘傳送點(diǎn)附近的斜坡,在這邊分別在A~F點(diǎn)測試尋路:
1.在E點(diǎn)嘗試移動到F點(diǎn)時(shí),角色會由E點(diǎn)走到F點(diǎn)
2.在D點(diǎn)嘗試移動到C點(diǎn)時(shí),角色只會面向C點(diǎn)走到崖邊
3.在A點(diǎn)嘗試移動到B點(diǎn)時(shí),角色只會面向B點(diǎn)走到崖邊
4.在D點(diǎn)嘗試移動到B點(diǎn)時(shí),角色只會面向崖上最近B點(diǎn)的點(diǎn)走(即A點(diǎn))
5.在D點(diǎn)嘗試移動到CF的中間時(shí),角色只會面向崖上最近CF的中間的點(diǎn)走(即DE點(diǎn)的中間)
6.在D點(diǎn)嘗試移動到F點(diǎn)時(shí),角色會由D點(diǎn)走到F點(diǎn)
而在旁邊的房子A~F點(diǎn)尋路:
7.在B點(diǎn)嘗試移動到C點(diǎn)時(shí),角色只會面向C點(diǎn)走到牆邊
8.在A點(diǎn)嘗試移動到C點(diǎn)時(shí),角色只會面向C點(diǎn)走到牆邊
9.在A/B點(diǎn)嘗試移動到D/E/F點(diǎn)時(shí),角色會由B點(diǎn)走到D/E/F點(diǎn)
10.在A點(diǎn)更後的地方嘗試移動到C點(diǎn)時(shí),角色會由A點(diǎn)更後的地方走到C點(diǎn)
11.在C點(diǎn)嘗試移動到A點(diǎn)更後的地方時(shí),角色會由C點(diǎn)走到A點(diǎn)更後的地方
測試結(jié)果
根據(jù)觀察結(jié)果,當(dāng)鼠標(biāo)左鍵的技能是"移動"時(shí),在點(diǎn)擊一個在角色可去到的位置時(shí),似乎會根據(jù)距離和尋路路線長度決定走尋路還是徑直移動到目的地。
以下是目前想法,
if(角色和目標(biāo)位置距離很近但尋路路線很長)
{
從角色位置向目標(biāo)位置發(fā)射射線找邊界
記錄兩個Vector3的點(diǎn)為射線找到Navmesh邊界的位置
一個點(diǎn)修改x=目標(biāo)位置的x
一個點(diǎn)修改z=目標(biāo)位置的z
從兩個點(diǎn)各自向目標(biāo)位置發(fā)射射線
if(如果一個點(diǎn)有找到邊界且另一個沒有找到邊界)
{
// 找到邊界的點(diǎn)是近角色位置的邊界
角色移動到找到邊界的點(diǎn)的位置
}
else
{
//兩個點(diǎn)都找到/找不到的話代表地型可能太複雜
角色移動角色位置向目標(biāo)位置發(fā)射射線找到邊界的位置
}
}
else
{
角色根據(jù)尋路路線移動到目標(biāo)位置
}
程式碼
這邊用了3個Script:
PlayerCommandGiver給移動指令
Movement 控制Navmeshagent目的地及獲取路線長度
PlayerController 控制尋路目的地的選擇
*這邊SamplePosition的maxDistance要調(diào)高一點(diǎn)才可以正確找到對應(yīng)Navmesh上的點(diǎn)。
*NavMesh.CalculatePath找非常長的路徑時(shí)會用比較多的資源,以後以技能命令移動時(shí)大概會加上CD,令到不用每個Upadte都做一次。
從影片中可以看到角色轉(zhuǎn)身似乎有點(diǎn)問題以及轉(zhuǎn)彎時(shí)角色移動速度變慢了,這個要再查資料解決。
下次就到跳躍/衝鋒/傳送 3種位移技能測試
Good luck, Exiles.