This document is about: QUANTUM 2
SWITCH TO

Navmesh Off Mesh Links 사용

Quantum은 Unity Off Mesh 링크를 자체 데이터 구조체로 내보내고 navmesh 링크로 작업할 수 있도록 최소한의 지원을 제공합니다.

  • 유니티 Off Mesh Link를 생성합니다. Quantum은 Activated, Auto Update Positions 그리고 Navigation Area 속성을 무시합니다.
off mesh link setup
  • 맵을 굽고 MapNavMeshDebugDrawer 스크립트를 사용하여 결과 링크를 확인합니다. 링크는 파란색 화살표로 렌더링됩니다.
off mesh link debug
  • 에이전트가 경로 찾기 중에 이미 자동으로 navmesh 링크를 사용합니다.
off mesh link path gizmo

링크를 켜고 끌 수 있으며 Quantum navmesh 영역을 사용하여 에이전트가 링크를 사용할 수 있는 항목을 제한할 수 있습니다. MapNavMeshRegion 스크립트를 Off Mesh Link에 첨부하여 Id를 설정하고 Cast RegionNo Region으로 설정합니다.

off mesh link regions

게임 플레이에서 후킹

변경 없이 에이전트가 정상 속도로 링크를 통과합니다. 링크에 도달하면 ISignalOnNavMeshWaypointReached 시그널을 수신하여 에이전트를 제어할 수 있습니다. 그런 다음 애니메이션이 완료될 때까지 에이전트를 사용하지 않도록 설정하거나 ISignalOnNavMeshMoveAgent 시그널에서 이동 코드를 재정의합니다(MovementTypeCallback으로 토글 하기 위해서는 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)이 실행되지 않습니다.
Back to top