2014-07-20 3 views
4

Unity에서 RTS 게임을 만들려고하는데 경로 찾기에 문제가 있습니다. 나는 경로 찾기에 NavMesh를 사용하고 잘 작동합니다 : 단위는 정적 객체를 피합니다. 그러나 단위는 서로를 피하지 않습니다. 유닛이 NavMesh Obstacle이라 불리는 구성 요소는 비 정적 오브젝트를 피할 수 있지만, 볼 수 있듯이 유닛이 자체를 피하려고하기 때문에 NavMesh Agent와 작동하지 않습니다. 어떻게 단위가 서로를 피할 수 있습니까?Unity NavMesh Obstacle

답변

0

NavMeshAgent에는 이미 다른 에이전트를 피하기 위해 사용되는 반경이 있습니다. 이 반경을 늘리면 도움이되는지 확인할 수 있습니다.

또한 "avoidancePriority" 변수를 사용하여 피해야 할 상담원의 우선 순위를 조정할 수 있습니다. 당신은 당신 주위의 다른 에이전트의 양에 따라이 값을 변경하는 스크립트를 만들 수 있습니다.

그렇다면 훌륭한 길 찾기 시스템이 정말로 필요하다면 the asset store에 전화하거나 직접 만들어 보는 것이 더 좋은 방법 일 것입니다. 유니티의 길 찾기에 대한 나의 경험은 너무 작아서 너무 많은 일들을하려고하기 때문에별로 좋지 않았습니다. 예를 들어, 내 지식으로는 하나의 NavMesh 레이어에 NavMeshObstacle을 사용할 수 없습니다 ... 다른 유닛에 여러 레이어를 사용하는 경우 실제로 사용할 수 없습니다. (육지/수/항공/...)

3

나는 잠시 있었지만 지난 두 시간 동안 같은 문제에 직면 해 왔다는 것을 알고있다. 나는 마침내 두 구성 요소 (NavMeshAgent 및 NavMeshObstacle)를 혼합 할 수있었습니다. 유일한 요구 사항은 동시에 활성화 할 수 없다는 것입니다. 내 전략은 에이전트를 비활성화하고 장애물을 활성화하고 (카베 옵션을 활성화 한 상태에서) 유닛을 이동할 때 장애물을 비활성화하고 에이전트를 활성화하는 것이 었습니다.

그냥 마지막 코멘트. 다만 계산하는 에이전트 방법을 사용하여,이 후

public IEnumerator EnableUnitMovementCoroutine() 
{ 
    if (obstacle != null && obstacle.enabled) 
    { 
     obstacle.enabled = false; 
    } 

    yield return new WaitForEndOfFrame(); 

    if (agent != null && !agent.enabled) 
    { 
     agent.enabled = true; 
     destinationSet = false; 
    } 

    yield return new WaitForEndOfFrame(); 

    unitMoving = true; 
} 

: 나는 작은 단위 변위 문제를 일으키는 장애물을 비활성화하고 동일한 프레임에서 에이전트를 수 있도록, 그래서 그렇게 코 루틴을 사용하여주었습니다 경로. BTW에서는 재생 모드에서 탐색 탭을 선택하여 유닛의 장애물을 포함하여 실시간으로 navmesh를 볼 수 있습니다.

희망이 도움이됩니다.

추신. 난 그냥이 체크와 함께 이상한 문제를 가지고 있음을 기억 : 그것은 항상 내가 원하는 대상을 설정하는 순간부터 사실 때문에

_agent.pathStatus != NavMeshPathStatus.PathComplete 

그래서 나는 현재 그것을 사용하고 있지 않다. 두 구성 요소를 동시에 사용하면 버그가 발생합니다. 남은 거리 확인을 위해 그것을 대체했습니다.