I’m using the NavMesh Components workflow, and in my stage I have NavMesh Links that cross some gaps. When a character uses the link, I want to trigger a Jump animation, but I don’t see how I can tell that the character has either A) Used the NavMesh Link, or even B) Changed to a different Area Type in the NavMesh. I assume this much be pretty simple, but I’ve missed it. Anyone know if there is an event that fires when using a NavMesh Link, or when entering a new Area Type in the mesh?
Thanks,
-Dan
I haven’t seen an event anywhere. But you can check isOnOffMeshLink on NavMeshAgent
[Serializable]
public class NavMeshLinkMonitor
{
private NavMeshAgent _agent;
public NavMeshLinkMonitor(NavMeshAgent agent)
{
_agent = agent;
}
public OffMeshLinkEvent AgentEnteredLink = new OffMeshLinkEvent();
public OffMeshLinkEvent AgentExitedLink = new OffMeshLinkEvent();
public bool IsOnLink;
private OffMeshLinkData _data;
private NavMeshSurface _startSurface;
private NavMeshLink _link;
public void Check()
{
if (_agent.isOnOffMeshLink && !IsOnLink)
{
var link = _agent.navMeshOwner as NavMeshLink;
if (link != null)
{
_link = link;
}
_data = _agent.currentOffMeshLinkData;
AgentEnteredLink?.Invoke(new NavMeshEventData
{
Agent = _agent,
LinkData = _data,
});
IsOnLink = true;
}
else if (!_agent.isOnOffMeshLink && IsOnLink)
{
AgentExitedLink?.Invoke(new NavMeshEventData
{
Agent = _agent,
LinkData = _data,
});
IsOnLink = false;
}
}
public class NavMeshEventData
{
public NavMeshAgent Agent { get; set; }
public OffMeshLinkData LinkData { get; set; }
}
[System.Serializable]
public class OffMeshLinkEvent : UnityEvent<NavMeshEventData>
{
}
}