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.