I have grid movement set up for the player within a set space. The player moves one unit at a time and can move several units when holding down a direction key. I would like the player to respawn back to a respawn point empty object when the player collides with a hazard's collider. I have the GridMovement script on the player: using System.Collections; using UnityEngine; public class GridMovement : MonoBehaviour { [SerializeField] private float forwardBoundary = 13f; [SerializeField] private float leftBoundary = -13f; [SerializeField] private float backBoundary = -13f; [SerializeField] private float rightBoundary = 13f; //[SerializeField] private Transform respawnPoint; private bool isMoving; //time it takes for player to move from originalPosition to targetPosition. In seconds (so 1/5th of a second) private float timeToMove = 0.2f; void Update() { if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) StartMove(Vector3.forward); if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) StartMove(Vector3.left); if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) StartMove(Vector3.back); if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) StartMove(Vector3.right); } private bool StartMove(Vector3 direction) { if (isMoving) return false; StartCoroutine(MovePlayer(direction)); return true; } private IEnumerator MovePlayer(Vector3 direction) { isMoving = true; float elapsedTime = 0; Vector3 originalPosition = transform.position; Vector3 targetPosition = originalPosition + direction; if (ValidateGridPosition(targetPosition) == targetPosition) { while (elapsedTime < timeToMove) { transform.position = Vector3.Lerp(originalPosition, targetPosition, (elapsedTime / timeToMove)); elapsedTime += Time.deltaTime; yield return null; } } transform.position = ValidateGridPosition(targetPosition); isMoving = false; } private Vector3 ValidateGridPosition(Vector3 position) { if (position.x > rightBoundary) { position.x = rightBoundary; } else if (position.x < leftBoundary) { position.x = leftBoundary; } else if (position.z > forwardBoundary) { position.z = forwardBoundary; } else if (position.z < backBoundary) { position.z = backBoundary; } return position; } } The player has an empty script on it called Player because it is more scalable than using Tags in Unity. This is the Respawn script on the hazard: using UnityEngine; public class Respawn : MonoBehaviour { [SerializeField] private Transform player; [SerializeField] private Transform respawnPoint; private void OnTriggerEnter(Collider other) { Debug.Log("We've collided!"); Player p = other.GetComponent<Player>(); if (p != null) player.transform.position = respawnPoint.transform.position; } } "We've collided!" displays in the console so I'm guessing the player isn't being teleported back to the respawn point because of Lerp in the GridMovement script? How do I interrupt that?