[unity] NavMesh 尋路 貼邊走的問題 優化。
阿新 • • 發佈:2018-11-03
NavMesh 尋路出來後, 角色走路很多時候貼著地圖的邊緣走,很彆扭。
網上找了一個類似的問題: http://www.manew.com/thread-94163-1-1.html
裡面方案 也挺適合我們的情況, 沒用NavMesh Agent ,而是根據算出來的點 自己移動的。
基本解決方案:
float radius = 1; Vector3[] pathCorners; if (NavMesh.CalculatePath(character.transform.position, targetPosition, NavMesh.AllAreas, navPath) && navPath.corners.Length > 1) { pathCorners = navPath.corners; for (int i = 1; i < pathCorners.Length - 2; i++) { NavMeshHit hit; bool result = NavMesh.FindClosestEdge(pathCorners[i], out hit, NavMesh.AllAreas); if (result && hit.distance < radius) pathCorners[i] = hit.position + hit.normal * radius; } }
基本思路大概就是 CalculatePath之後, 把 每個尋路點 往最近的邊緣( FindClosestEdge)上做個法線,法線方向上偏移一下( hit.normal * radius),
這樣走路不至於貼邊了。 不過每個人走的路徑還是差不多,,,這個麼 把radius隨機下可能就好了。