Quick answer: Warp needs a point on the navmesh. Use NavMesh.SamplePosition to snap your target to the nearest valid spot, then Warp there.
A respawn teleports an enemy with agent.Warp(spawnPoint). It returns false or the agent ends up frozen — spawnPoint isn’t on the navmesh.
Sample First, Warp Second
if (NavMesh.SamplePosition(spawnPoint, out NavMeshHit hit, 2.0f, NavMesh.AllAreas))
{
agent.Warp(hit.position);
}
else
{
Debug.LogWarning("No navmesh near spawn point");
}
SamplePosition finds the closest navmesh point within a radius. Warp to that, not the raw spawn point.
Why Raw Warp Fails
Warp expects a position the agent can actually stand on. A spawn point placed in the editor a little above the floor, or just off the navmesh edge, isn’t valid — Warp returns false and the agent has no valid location.
Sample Radius
The 2.0 in the example is the search radius. Too small and points slightly off-mesh fail; too large and you might snap to a wrong region. 1–3 units suits most setups.
Re-enable After Warp
If you disabled the agent before moving it, re-enable after Warp. Disabling/re-enabling around a Warp is also a reliable way to reset path state cleanly.
Verifying
Respawn enemies at various points, including some authored slightly off-mesh. All snap to a valid navmesh position and resume pathing. No frozen agents.
“Warp needs a navmesh point. SamplePosition makes any approximate point valid.”
Wrap ‘warp to nearest navmesh point’ in a helper — every spawn, teleport, and knockback-recovery wants it.