Navmesh Off Mesh Links 사용
Quantum은 Unity Off Mesh 링크를 자체 데이터 구조체로 내보내고 navmesh 링크로 작업할 수 있도록 최소한의 지원을 제공합니다.
Navmesh Links 생성하기
- 유니티 Off Mesh Link를 생성합니다. Quantum은Activated,Auto Update Positions그리고Navigation Area속성을 무시합니다.
 
- 맵을 굽고 MapNavMeshDebugDrawer스크립트를 사용하여 결과 링크를 확인합니다. 링크는 파란색 화살표로 렌더링됩니다.
 
- 에이전트가 경로 찾기 중에 이미 자동으로 navmesh 링크를 사용합니다.
 
Navmesh Links 토글
링크를 켜고 끌 수 있으며 Quantum navmesh 영역을 사용하여 에이전트가 링크를 사용할 수 있는 항목을 제한할 수 있습니다. MapNavMeshRegion 스크립트를 Off Mesh Link에 첨부하여 Id를 설정하고 Cast Region을 No Region으로 설정합니다.
 
게임 플레이에서 후킹
변경 없이 에이전트가 정상 속도로 링크를 통과합니다. 링크에 도달하면 ISignalOnNavMeshWaypointReached 시그널을 수신하여 에이전트를 제어할 수 있습니다. 그런 다음 애니메이션이 완료될 때까지 에이전트를 사용하지 않도록 설정하거나 ISignalOnNavMeshMoveAgent 시그널에서 이동 코드를 재정의합니다(MovementType를 Callback으로 토글 하기 위해서는 navmesh 구성을 변경해야 합니다).
이 코드 샘플은 링크 시작 웨이포인트를 밟을 때 텔레포트를 수행합니다.
C#
public void  OnNavMeshWaypointReached(Frame f, EntityRef entity, FPVector2 waypoint, Navigation.WaypointFlag waypointFlags, ref bool resetAgent) {
    var agent = f.Get<NavMeshPathfinder>(entity);
    var waypointIndex = agent.WaypointIndex;
    // btw HasFlag() is convenient but slow
    if ((waypointFlags & Navigation.WaypointFlag.LinkStart) == Navigation.WaypointFlag.LinkStart) {
        // we can be pretty sure that there always is a next waypoint for a link start
        var linkDestination = agent.GetWaypoint(f, waypointIndex + 1);
        f.Unsafe.GetPointer<Transform2D>(entity)->Position = linkDestination;
    }
}
링크 Traversing 예외
- 에이전트가 NavMeshPathfinder.IsOnLink(FrameBase)를 사용하여 현재 링크를 통과하는지 쿼리 합니다.
- 에이전트가 연결을 통과하는 동안 새 대상을 설정하면 에이전트가 경로 찾기를 실행하기 전에 현재 연결을 완료합니다. 이 작업은 WaypointFlag.RepathWhenReached를 설정하여 수행합니다.
- 마지막 경유지 이전의 경유지가 LinkStart이면 재경로가 트리거 됩니다. 이렇게 하면 링크 시작 경유지에 이미 도달했을 때 경로 재실행 문제를 조기에 완화할 수 있습니다.
- 에이전트가 트래버싱 링크이면 자동 재패칭(NavMeshAgentConfig.MaxRepathTimeout)이 실행되지 않습니다.