// Update is called once per frame void Update() { if (shotAmmo) { if (transform.position.y < FloorPlacementController.savePlane.transform.position.y) { gameManager.DestroyAmmo(); } return; } if (!TryGetTouchPosition(out Vector2 touchPosition)) { transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, Camera.main.nearClipPlane + .2f)); return; } if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began) { Ray ray = Camera.main.ScreenPointToRay(touchPosition); RaycastHit hitObject; if (Physics.Raycast(ray, out hitObject) && gameManager.canGrabAmmo) { if (hitObject.transform.tag == "Ammo") { holdTouch = true; } } } if (holdTouch && TouchPhase.Ended == Input.touches[0].phase) { ShootAmmo(); holdTouch = false; } if (holdTouch) { lineRenderer.enabled = true; // as y goes down, z comes closer float pullBallOnZAxis = touchPosition.y * (Camera.main.nearClipPlane + .2f) / (Screen.height / 2); transform.position = Camera.main.ScreenToWorldPoint(new Vector3(touchPosition.x, touchPosition.y, pullBallOnZAxis)); ammoOrigin = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, Camera.main.nearClipPlane + .2f)); directionOfForce = (ammoOrigin - transform.position); distance = Vector3.Distance(ammoOrigin, transform.position); predictionManager.Predict(gameObject, transform.position, directionOfForce * (distance * 200f), lineRenderer); } }