Пример #1
0
    // 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);
    }
Пример #2
0
    // 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;
        }
    }