1. 程式人生 > >[unity] NavMesh 尋路 貼邊走的問題 優化。

[unity] NavMesh 尋路 貼邊走的問題 優化。

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隨機下可能就好了。