Quick answer: Unity Time.deltaTime reading 0 on the first frame of a new scene? Engine resets time counter at scene load - guard zero-delta in motion code or use Time.smoothDeltaTime.

Player teleports to scene boundary because position += velocity * deltaTime with deltaTime = 0 then suddenly = 0.5.

Guard zero delta

if (Time.deltaTime > 0) {
  position += velocity * Time.deltaTime;
}

Simple guard prevents the zero-then-spike pattern.

Or use smoothDeltaTime

smoothDeltaTime is the moving average; never zero after first frame.

Reset velocities on scene change

Listen for sceneLoaded; zero velocities. The teleport spike comes from a stale velocity meeting a fresh deltaTime.

“Scene-load frames are special. Engine code knows; gameplay code often doesn't.”

Establish a 'first frame' contract: gameplay code must tolerate zero deltaTime once per scene change. Documented; consistent.

Related reading