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
)이 실행되지 않습니다.