前往
大廳
主題

[TheVision(願景)遊戲製作日誌][006]-移動及地形2

Herobrine | 2022-11-07 01:41:40 | 巴幣 0 | 人氣 242

測試尋路系統


首先我們來到岡姆的堡壘傳送點附近的斜坡,在這邊分別在A~F點測試尋路:
1.在E點嘗試移動到F點時,角色會由E點走到F點
2.在D點嘗試移動到C點時,角色只會面向C點走到崖邊
3.在A點嘗試移動到B點時,角色只會面向B點走到崖邊
4.在D點嘗試移動到B點時,角色只會面向崖上最近B點的點走(即A點)
5.在D點嘗試移動到CF的中間時,角色只會面向崖上最近CF的中間的點走(即DE點的中間)
6.在D點嘗試移動到F點時,角色會由D點走到F點

而在旁邊的房子A~F點尋路:
7.在B點嘗試移動到C點時,角色只會面向C點走到牆邊
8.在A點嘗試移動到C點時,角色只會面向C點走到牆邊
9.在A/B點嘗試移動到D/E/F點時,角色會由B點走到D/E/F點
10.在A點更後的地方嘗試移動到C點時,角色會由A點更後的地方走到C點
11.在C點嘗試移動到A點更後的地方時,角色會由C點走到A點更後的地方

測試結果


根據觀察結果,當鼠標左鍵的技能是"移動"時,在點擊一個在角色可去到的位置時,似乎會根據距離和尋路路線長度決定走尋路還是徑直移動到目的地。

以下是目前想法,

if(角色和目標位置距離很近但尋路路線很長)
{
從角色位置向目標位置發射射線找邊界
記錄兩個Vector3的點為射線找到Navmesh邊界的位置
一個點修改x=目標位置的x
一個點修改z=目標位置的z
     
從兩個點各自向目標位置發射射線

if(如果一個點有找到邊界且另一個沒有找到邊界)
{
// 找到邊界的點是近角色位置的邊界
角色移動到找到邊界的點的位置
}
else
{
//兩個點都找到/找不到的話代表地型可能太複雜
角色移動角色位置向目標位置發射射線找到邊界的位置
}
}
else
{
角色根據尋路路線移動到目標位置
}

程式碼


這邊用了3個Script:
PlayerCommandGiver給移動指令

Movement 控制Navmeshagent目的地及獲取路線長度

PlayerController 控制尋路目的地的選擇
*這邊SamplePosition的maxDistance要調高一點才可以正確找到對應Navmesh上的點。
*NavMesh.CalculatePath找非常長的路徑時會用比較多的資源,以後以技能命令移動時大概會加上CD,令到不用每個Upadte都做一次。

從影片中可以看到角色轉身似乎有點問題以及轉彎時角色移動速度變慢了,這個要再查資料解決。

下次就到跳躍/衝鋒/傳送 3種位移技能測試

Good luck, Exiles.

創作回應

更多創作