IEnumerator FinalMovement() { // Wait a tiny bit for "shooting while standing" effect yield return(new WaitForSeconds(0.25f)); float i = 0f; // How long to move for float time = 1f; float rate = 1.0f / time; // How far to move in that time // To calculate rate, get change in position (WidestPt-ZeroPt = Displacement) float zoomRate = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, 0, 0)).x; zoomRate -= Camera.main.ScreenToWorldPoint(Vector3.zero).x; while (i < 1.0) { yield return(new WaitForEndOfFrame()); // If not active, exit out of this whole shenanigan! if (!active) { i = 5; } i = i + (Time.deltaTime * rate); // Zoom off the screen Vector2 pos = transform.position; pos.x += -zoomRate * Time.deltaTime; transform.position = pos; } // Finally "destroy" self and return to pool spawnController.KillSpawn(); }