menu_bookDocumentation
NavMesh Links: Custom Agent Traversal with Jump, Ladder, and Physics Examples
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:- Override NavMeshLink.OnLinkEntered()
- Subscribe to NavMeshLink.LinkEntered event
- Subscribe to NavMeshAgent.LinkEnter event
- Check NavMeshAgent.IsTraversingLink in OnUpdate
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?