패키지를 사용할 때 볼 수 있는 다양한 오류 메시지에 대한 자세한 설명입니다.

Installation Errors 참조

 

Path error messages

다음은 경로를 검색할 때 발생할 수 있는 오류입니다. 이러한 오류는 치명적인 것이 아니며, 시스템이 어떤 이유로 인해 유효한 경로를 찾을 수 없다는 것을 의미합니다.

Couldn't find a node close to the start point(시작 지점 근처에 노드를 찾을 수 없음

경로 요청이 시작되면 시스템은 경로의 시작 지점에 가장 가까운 노드(그리드 그래프의 타일 하나, 네비게이션 메쉬/리캐스트 그래프의 삼각형 하나, 포인트 그래프의 점 하나)를 찾습니다. 이 검색은 제한된 범위를 가지지만, 일반적으로 실용적인 목적을 위해 충분합니다. 따라서 그래프의 (이동 가능한) 노드와 전혀 가까이 있지 않은 지점에서 경로를 요청하면 이 오류가 기록됩니다.

이 오류를 해결하는 방법:

  • 경로 요청의 시작 지점이 올바른지 확인하십시오.
  • 포함된 이동 스크립트 중 하나를 사용 중인 경우, AI가 그래프와 합리적으로 가까운 곳에서 시작하도록 하십시오.
  • 시작 지점이 올바르며 검색 범위를 확장하고 싶다면 AstarPath.maxNearestNodeDistance 필드를 증가시키십시오. 그러나 가장 가까운 노드를 찾기 위해 먼 거리를 검색해야 하면 성능에 영향을 미칠 수 있습니다.

Couldn't find a node close to the end point(끝 지점 근처에 노드를 찾을 수 없음)

이 오류는 위의 오류와 매우 유사합니다. 그러나 끝 지점에 가장 가까운 노드를 찾을 때 시스템은 해당 노드가 이동 가능할 뿐만 아니라 시작 노드에서 도달할 수 있어야 한다는 추가 제약 조건을 가집니다. 이 오류는 일반적으로 AI가 맵의 한쪽 끝에 있는 작은 방에 갇혀 있고, 매우 먼 지점으로 이동하라는 명령을 받았을 때 발생합니다. 끝 지점에 가까운 노드를 찾으려면, 시작 노드에서 도달할 수 있는 노드만 검색할 수 있기 때문에 매우 큰 거리를 검색해야 합니다.

이 오류를 해결하는 방법:

  • 이전 오류를 참조하십시오.

 

There is no valid path to the target(대상까지 유효한 경로가 없음)

이 오류는 PathNNConstraint 클래스에서 상속받지 않거나 해당 클래스의 논리를 사용하지 않는 사용자 지정 NNConstraint를 경로 객체에 제공한 경우에 발생합니다.

이 오류를 해결하는 방법:

Searched whole area but could not find target(전체 영역을 검색했지만 대상을 찾을 수 없음)

이는 시작 노드에서 끝 노드로의 가능한 경로가 없다는 것을 의미합니다. 일반적으로 태그를 사용하고 일부 태그를 통과할 수 없도록 설정한 경우에 발생합니다. 일반적인 이동 가능성에서는 시스템이 그래프의 어떤 노드에서 어떤 다른 노드로 도달할 수 있는지를 미리 계산하지만, 태그를 사용할 때는 이를 할 수 없습니다.


이미지는 모든 태그를 통과할 수 있을 때 검색된 노드를 보여줍니다. 빨간 사각형 안의 모든 노드에 수정된 태그가 있는 것을 확인하십시오.


이 이미지는 태그가 변경된 빨간 사각형 안의 노드를 통과할 수 없을 때 검색된 노드를 보여줍니다. 시작 노드에서 도달할 수 있는 모든 노드가 검색된 것을 확인하십시오.

 

No open points, the start node didn't open any nodes(열린 지점이 없음, 시작 노드가 노드를 열지 않음)

이 오류는 이전 오류의 특별한 경우입니다. 경로에서 단일 노드만 검색되고 경로의 끝을 찾을 수 없을 때 기록됩니다. 이 특정 오류는 종종 그리드 그래프의 간단한 구성 오류로 인해 발생합니다. AI에 콜라이더가 있고 해당 콜라이더가 그래프 설정의 Height Testing 레이어 마스크에 포함되어 있으면 그래프가 AI의 머리 위에 노드를 배치할 수 있습니다(이미지 참조).

 

결과적으로 AI는 매우 작은 방에 갇혀 있다고 생각하고 그곳에서 나갈 수 없게 됩니다.

이 오류를 해결하는 방법:

  • AI가 Height Testing 레이어 마스크에 포함되지 않은 레이어에 있는지 확인하십시오.

 

참조
GraphCollision.heightMask
https://docs.unity3d.com/Manual/Layers.html

 

Canceled path because a new one was requested(경로 취소됨: 새로운 경로가 요청되었기 때문)

Seeker 컴포넌트는 한 번에 하나의 경로 요청만 처리합니다. 경로 요청은 비동기적으로 처리되기 때문에 스크립트가 이전 경로가 완전히 계산되기 전에 새로운 경로를 계산하려고 시도할 수 있습니다. 에이전트가 맵의 다른 부분으로 텔레포트한 경우, 이전 경로 계산은 쓸모없게 될 수 있기 때문에 이러한 상황이 발생할 수 있습니다. 이러한 경우, Seeker는 이전 경로 요청을 취소하고 이 오류 메시지를 실패 이유로 설정합니다.

일반적인 경로 계산 시에도 이 메시지가 표시된다면, 스크립트가 새로운 경로 계산을 시작하기 전에 이전 경로가 계산되기를 제대로 기다리지 않았기 때문일 수 있습니다. Seeker가 계산을 완료했는지 확인하려면 Seeker.IsDone 메서드를 호출하거나 OnPathComplete 콜백이 호출될 때까지 기다릴 수 있습니다.

Canceled by script(스크립트에 의해 취소됨 (Seeker.CancelCurrentPathRequest))

이 오류 메시지는 이전 오류 메시지와 매우 유사하지만, 특정 스크립트가 Seeker.CancelCurrentPathRequest 메서드를 사용하여 경로 요청을 취소했음을 의미합니다. 경로가 스크립트에 의해 명시적으로 취소되었기 때문에 스크립트가 무엇을 하는지 알고 있다고 가정할 수 있으며, 이 메시지가 표시되더라도 걱정할 필요는 없습니다.

There are no graphs in the scene(씬에 그래프가 없음)

AstarPath 컴포넌트에 그래프가 전혀 포함되어 있지 않습니다. 파일에서 그래프를 로드하거나 스크립트를 사용하여 그래프를 생성하는 경우, 다른 스크립트가 경로를 요청하기 전에 이러한 작업이 완료되지 않은 것으로 보입니다.

그래프 오류

일부 메쉬가 정적으로 배치됨...

일부 메쉬가 정적으로 배치되었습니다. 이러한 메쉬는 기술적인 제약으로 인해 네비게이션 메쉬 계산에 사용할 수 없습니다.
런타임 동안 스크립트는 정적으로 배치된 메쉬의 데이터를 액세스할 수 없습니다.
이 문제를 해결하는 한 가지 방법은 캐시된 시작(인스펙터의 Save & Load 탭)을 사용하여 게임이 실행되지 않을 때만 그래프를 계산하는 것입니다.

 

유니티의 정적 배치 시스템은 여러 드로우콜을 단일 드로우콜로 결합하여 게임의 성능을 향상시킬 수 있기 때문에 훌륭합니다. 그러나 이 과정에서 유니티는 이 패키지의 스크립트가 런타임 중에 메쉬 데이터를 읽을 수 없게 만듭니다(유니티 편집기를 제외하고). 리캐스트 그래프의 경우, 이러한 메쉬를 런타임 중에 그래프를 생성하는 데 사용할 수 없음을 의미합니다.

이 이미지는 유니티가 정적 배치에 사용하는 토글을 보여줍니다.

 

이 오류를 해결하는 방법:

  • 레캐스트 그래프를 생성하기 위해 메쉬 대신 콜라이더를 사용할 수 있습니다(리캐스트 그래프 설정 참조). 일반적으로 콜라이더는 렌더링에 사용되는 메쉬보다 상세하지 않기 때문에 이 방법은 일반적으로 더 빠릅니다.
  • 그래프를 편집기에서 계산한 다음 게임을 시작할 때 파일에서 그래프를로드 할 수 있습니다. 이 패키지에있는 'Cached Startup' 기능을 사용하여이 작업을 매우 쉽게 수행 할 수 있습니다. 이렇게하면 게임의 시작 시간이 크게 개선되며 파일에서 그래프를로드하는 것이 처음부터 생성하는 것보다 훨씬 빠릅니다. 단점은 런타임 중에 생성되는 절차적 레벨에서 작동하지 않는다는 것입니다. 자세한 내용은 그래프 저장 및 로드를 참조하십시오.
  • 그래프가 생성 된 후 런타임 중에 지오메트리를 정적으로 배치하는 것이 가능합니다. https://docs.unity3d.com/ScriptReference/StaticBatchingUtility.html을 참조하십시오.
  • 물론 정적 배치를 사용하지 않을 수도 있습니다.

 

컴파일러 오류

패키지가 올바르게 설치되거나 업그레이드되지 않으면 컴파일러 오류가 발생할 수 있습니다. 패키지를 방금 업그레이드 한 경우 UnityPackages가 뭔가를 망가뜨렸는지 확인하는 가장 쉬운 방법은 AstarPathfindingProject 폴더(그리고 있다면 AstarPathfindingEditor 폴더도)를 삭제하고 패키지를 다시 가져오는 것입니다.

그렇지 않으면 비슷한 오류를 언급하는 쓰레드를 포럼에서 검색하는 것을 권장합니다.

'유니티 에셋 > A* Pathfinding project pro' 카테고리의 다른 글

Recast graph in a 3D game  (0) 2024.05.22
Example Scenes  (0) 2024.05.22
Migrating from Unity Navigation  (0) 2024.05.22
Architecture overview  (0) 2024.05.21
Graph Types  (0) 2024.05.21

+ Recent posts