Add a flag to determine if the player has been stopped. At that point, stop setting the players position to the camera's, and instead some other input. public float speed; public test testing; bool stopped = false; // Use this for initialization void Start () { speed = 10f; testing = Camera.main.GetComponent<test>(); } // Update is called once per frame void FixedUpdate () { if (!stopped) { Vector3 p = Camera.main.ViewportToWorldPoint(new Vector3(0.5F, 0.5F, Camera.main.nearClipPlane)); transform.position = new Vector3(p.x, p.y, -1); } else { //move away here } } void OnCollisionEnter2D(Collision2D col) { stopped = true; testing.speed = 0; } void OnCollisionExit2D(Collision2D col) { stopped = false; testing.speed = 10f; }