void FixedUpdate() { RaycastHit hit; Ray ray = cam.ViewportPointToRay(new Vector3(.5f, .5f, cam.nearClipPlane)); bool intersect = Physics.Raycast(ray, out hit, 3f); lock (_lock) { if (intersect && withinEpsilon(hit.point.y) && !inMotion && farFromOtherPlants(hit.point) && !mouseHold) { // Show option to plant plant seed.GetComponent <Renderer> ().enabled = true; seed.transform.position = hit.point; } else { seed.GetComponent <Renderer> ().enabled = false; } if (Input.GetMouseButton(0)) { if (intersect && withinEpsilon(hit.point.y) && !inMotion && farFromOtherPlants(hit.point) && !mouseHold) { // Plant plant using plantManager plantManager.AddNewPlant(hit.point); inMotion = false; seed.GetComponent <Renderer> ().enabled = false; } else // Continue moving { Vector3 forwardVector = go.transform.forward; forwardVector.y = 0; rb.velocity = forwardVector * speed; inMotion = true; } mouseHold = true; // Here so we can plant exactly one seed } else { rb.velocity = Vector3.zero; inMotion = false; mouseHold = false; } } cam.gameObject.transform.position = new Vector3(cam.gameObject.transform.position.x, 22, cam.gameObject.transform.position.z); }