// Atualizaçao quadro-a-quadro void Update() { PlayerMoviment(); if (wd.listaDados.Count > 300 && !(base.txtCriado)) { wd.CriaTxt(); Debug.Log("teste"); base.txtCriado = true; } // A força de lançamento do projetil e igual ao vetor de distancia do // canhao ao ponteiro do mouse. Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 dirMouse = mousePos - transform.position; m_force = dirMouse; // Desenha uma linha amarela no scene viewer do editor para indicar // visualmente o vetor de força Debug.DrawLine(transform.position, mousePos, Color.yellow); // Equipara a "altura" do alvo a do canhao Vector2 target = m_targetObject.transform.position; //target.y = transform.position.y; // Calcula os componentes de velocidade x e y float mass = m_bulletPrefab.GetComponent <Rigidbody2D>().mass; float gravity = Physics.gravity.magnitude; float velX = m_force.magnitude / mass; float time = (target.x - transform.position.x) / velX; float velY = gravity * (time / 2); // Calcula o angulo de lançamento m_angle = (Mathf.Atan2(velY, velX) * Mathf.Rad2Deg) - 15; // Ajusta conforme o angulo em que o tiro "deve" atingir o alvo time = (target.x - Mathf.Sin((90 - m_angle) * Mathf.Deg2Rad) - transform.position.x) / velX; velY = gravity * (time / 2); // Calcula a velocidade e forma finais Vector2 velocity = new Vector2(velX, velY); m_force = velocity * mass; // Rotaciona o canhao para o angulo calculado transform.rotation = Quaternion.Euler(0f, 0f, m_angle); //Envia dados //EnviaDados(m_angle, m_force, m_targetObject.transform.position.x); showTrajectoryPoints(); // Captura o pressionamento/liberaçao do botao do mouse // (somente se nao estiver sobre o checkbox da UI) if (!EventSystem.current.IsPointerOverGameObject()) { if (Input.GetMouseButtonDown(0)) { m_mousePressed = true; } if (Input.GetMouseButtonUp(0)) { m_mousePressed = false; shootBullet(); } } }