menu_bookDocumentation

NavMesh Links: Custom Agent Traversal with Jump, Ladder, and Physics Examples

calendar_today May 20, 2026 schedule ~1 min read person PatrickJr verified 50

NavMesh Links in s&box connect disconnected navigation areas, allowing agents to jump, climb ladders, or traverse gaps. Add a NavMeshLink component to a GameObject to create a link.

Default Traversal

By default, agents linearly interpolate between start/end positions. Override for custom behavior.

Custom Traversal

Disable default traversal with Agent.AutoTraverseLinks = false, then handle it yourself via:
  1. Override NavMeshLink.OnLinkEntered()
  2. Subscribe to NavMeshLink.LinkEntered event
  3. Subscribe to NavMeshAgent.LinkEnter event
  4. Check NavMeshAgent.IsTraversingLink in OnUpdate
Always call agent.CompleteLinkTraversal() when done.

Parabolic Jump Example

CSHARP
public sealed class JumpLink : NavMeshLink
{
    protected override void OnLinkEntered( NavMeshAgent agent )
    {
        ParabolicJump( agent );
    }
    
    private async void ParabolicJump( NavMeshAgent agent )
    {
        var start = agent.CurrentLinkTraversal.Value.AgentInitialPosition;
        var end = agent.CurrentLinkTraversal.Value.LinkExitPosition;
        var peakHeight = MathF.Abs( end.z - start.z ) + 25f;
        var duration = ((start + end) / 2f).WithZ( peakHeight ).Distance( start ) / agent.MaxSpeed;
        
        TimeSince timeSinceStart = 0;
        while ( timeSinceStart < duration )
        {
            var t = timeSinceStart / duration;
            var newPosition = Vector3.Lerp( start, end, t );
            newPosition.z = MathX.Lerp( start.z, end.z, t ) + 4f * peakHeight * t * (1f - t);
            agent.SetAgentPosition( newPosition );
            await Task.Frame();
        }
        agent.SetAgentPosition( end );
        agent.CompleteLinkTraversal();
    }
}

LinkTraversalData

Agent.CurrentLinkTraversal provides: LinkEnterPosition, LinkExitPosition, AgentInitialPosition, and LinkComponent.
Was this helpful?