// Update is called once per frame protected override void Update() { //si el player esta en su rango, dispara base.Update(); float distance = Vector2.Distance(this.transform.position, playerBe.transform.position); if (distance < shootDistance) { playerDetected = true; } else if (distance > shootDistance) { playerDetected = false; } if (playerDetected) { if (shootCounter >= shootTime) { Debug.Log("Shoot"); cannon.ShotRotateBullets(); shootCounter = 0; } else { shootCounter += Time.deltaTime; } } Debug.DrawLine(this.transform.position, playerBe.transform.position, Color.blue); Vector3 vectorToTarget = playerBe.transform.position - transform.position; float angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); cannon.transform.rotation = Quaternion.Slerp(cannon.transform.rotation, q, Time.deltaTime * lookSpeed); }
// Update is called once per frame protected override void Update() { base.Update(); //Cambio de dirección if (!canon.negative) { //left directionF = transform.TransformDirection(Vector2.left); } else if (canon.negative) { //right directionF = transform.TransformDirection(Vector2.right); } Vector2 direction = directionF; RaycastHit2D hit = Physics2D.Raycast(transform.position - new Vector3(0, 0, 0), direction, 2, ground); if (hit.collider != null) { ChangeRotation(); } if (playerDetected) { anim.SetBool("Shooting", true); if (shootCounter >= shootTime) { canon.ShotRotateBullets(); shootCounter = 0; } else { shootCounter += Time.deltaTime; } speed = 0; } else { Move(); anim.SetBool("Shooting", false); } speed = 1; //Debug.DrawLine(this.transform.position, playerBe.transform.position, Color.blue); //Detecta jugador Vector3 vectorToTarget = playerBe.transform.position - transform.position; float angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg; angleP = angle; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); canon.transform.rotation = Quaternion.Slerp(canon.transform.rotation, q, Time.deltaTime * lookSpeed); float distance = Vector2.Distance(this.transform.position, playerBe.transform.position); Vector3 fov = Quaternion.AngleAxis(angle, transform.forward) * transform.right; RaycastHit2D hitP = Physics2D.Raycast(transform.position, fov, distance); if (hitP.collider != null) { if (hitP.collider.CompareTag("Player")) { if (angle < 50 && angle > -50 && canon.negative && distance < shootDistance) { playerDetected = true; } else if (angle > 130 && angle < 230 && !canon.negative && distance < shootDistance) { playerDetected = true; } else { playerDetected = false; } } } else if (hitP.collider.CompareTag("ground")) { playerDetected = false; } else if (distance > shootDistance) { playerDetected = false; } else { playerDetected = false; } }