Пример #1
0
    private void Update()
    {
        distaciaConPlayer    = Mathf.Abs(player.position.x - transform.position.x);
        transform.localScale = new Vector3(1 * direccion, 1, 1);

        switch (comportamiento)
        {
        case tipoDeComportamientoEnemy.pasivo:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                _rb.velocity = new Vector2(speed * direccion, _rb.velocity.y);

                if (transform.position.x < limitLeft)
                {
                    direccion = 1;
                }
                if (transform.position.x > limitRight)
                {
                    direccion = -1;
                }
                if (distaciaConPlayer < entradaZonaPersecucion)
                {
                    comportamiento = tipoDeComportamientoEnemy.persecucion;
                }
            }
            break;

        case tipoDeComportamientoEnemy.persecucion:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                _rb.velocity = new Vector2(speed * direccion, _rb.velocity.y);

                if (player.position.x > transform.position.x)
                {
                    direccion = 1;
                }
                if (player.position.x < transform.position.x)
                {
                    direccion = -1;
                }
                if (distaciaConPlayer > salidaZonaPersecucion)
                {
                    comportamiento = tipoDeComportamientoEnemy.pasivo;
                }
                if (distaciaConPlayer < zonaAtaque)
                {
                    comportamiento = tipoDeComportamientoEnemy.ataque;
                }
            }
            break;

        case tipoDeComportamientoEnemy.ataque:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                _rb.velocity = new Vector2(0, _rb.velocity.y);

                if (player.position.x > transform.position.x)
                {
                    direccion = 1;
                }
                if (player.position.x < transform.position.x)
                {
                    direccion = -1;
                }

                if (distaciaConPlayer > zonaAtaque)
                {
                    comportamiento = tipoDeComportamientoEnemy.persecucion;
                }
            }
            break;
        }
    }
Пример #2
0
    private void Update()
    {
        distaciaConPlayer    = Mathf.Abs(player.position.x - transform.position.x);
        transform.localScale = new Vector3(1 * direccion, 1, 1);

        switch (comportamiento)
        {
        case tipoDeComportamientoEnemy.pasivo:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                _rb.velocity = new Vector2(speed * direccion, _rb.velocity.y);
                _anim.SetBool("Idle", false);
                if (transform.position.x < limitLeft)
                {
                    direccion = 1;
                }
                if (transform.position.x > limitRight)
                {
                    direccion = -1;
                }
                if (distaciaConPlayer < entradaZonaPersecucion)
                {
                    comportamiento = tipoDeComportamientoEnemy.persecucion;
                }
            }
            break;

        case tipoDeComportamientoEnemy.persecucion:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                _rb.velocity = new Vector2(speed * direccion, _rb.velocity.y);
                _anim.SetBool("Idle", false);
                if (player.position.x > transform.position.x)
                {
                    direccion = 1;
                }
                if (player.position.x < transform.position.x)
                {
                    direccion = -1;
                }
                if (distaciaConPlayer > salidaZonaPersecucion)
                {
                    comportamiento = tipoDeComportamientoEnemy.pasivo;
                }
                if (distaciaConPlayer < zonaAtaque)
                {
                    comportamiento = tipoDeComportamientoEnemy.ataque;
                }
            }
            break;

        case tipoDeComportamientoEnemy.ataque:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                if (Time.time > nextFire)
                {
                    nextFire = Time.time + fireRate;
                    //dificil
                    _anim.SetBool("Idle", true);
                    _anim.SetTrigger("AttackP");
                    if (direccion == 1)
                    {
                        Instantiate(portal, _firePointP.position + new Vector3(0.2f, 0, 0), Quaternion.identity);
                        Instantiate(portaled, player.position + new Vector3(0.1f, 0.1f, 0), Quaternion.identity);
                    }
                    else if (direccion == -1)
                    {
                        Instantiate(portal, _firePointP.position + new Vector3(-0.2f, 0, 0), Quaternion.identity);
                        Instantiate(portaled, player.position + new Vector3(-0.1f, 0.1f, 0), Quaternion.identity);
                    }
                }

                _rb.velocity = new Vector2(0, _rb.velocity.y);
                if (player.position.x > transform.position.x)
                {
                    direccion = 1;
                }
                if (player.position.x < transform.position.x)
                {
                    direccion = -1;
                }

                if (distaciaConPlayer > zonaAtaque)
                {
                    comportamiento = tipoDeComportamientoEnemy.persecucion;
                }
            }
            break;
        }
    }
Пример #3
0
    private void Update()
    {
        distaciaConPlayer    = Mathf.Abs(player.position.x - transform.position.x);
        transform.localScale = new Vector3(1 * direccion, 1, 1);
        StopCoroutine("ShootLaser");
        anim.SetBool("RunO", true);
        switch (comportamiento)
        {
        case tipoDeComportamientoEnemy.pasivo:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                _rb.velocity = new Vector2(speed * direccion, _rb.velocity.y);

                if (transform.position.x < limitLeft)
                {
                    direccion = 1;
                }
                if (transform.position.x > limitRight)
                {
                    direccion = -1;
                }
                if (distaciaConPlayer < entradaZonaPersecucion)
                {
                    comportamiento = tipoDeComportamientoEnemy.persecucion;
                }
            }
            break;

        case tipoDeComportamientoEnemy.persecucion:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                StopCoroutine("ShootLaser");
            }
            {
                _rb.velocity = new Vector2(speed * 2f * direccion, _rb.velocity.y);

                if (player.position.x > transform.position.x)
                {
                    direccion = 1;
                }
                if (player.position.x < transform.position.x)
                {
                    direccion = -1;
                }
                if (distaciaConPlayer > salidaZonaPersecucion)
                {
                    comportamiento = tipoDeComportamientoEnemy.pasivo;
                }
                if (distaciaConPlayer < zonaAtaque)
                {
                    comportamiento = tipoDeComportamientoEnemy.ataque;
                }
            }
            break;

        case tipoDeComportamientoEnemy.ataque:
            if (_rb.velocity.magnitude < umbralVelocidad)
            {
                StartCoroutine("ShootLaser");
                anim.SetTrigger("AttackL");
                anim.SetBool("RunO", false);

                _rb.velocity = new Vector2(0, _rb.velocity.y);

                if (player.position.x > transform.position.x)
                {
                    transform.eulerAngles = new Vector3(0, 0, 0);
                    direccion             = 1;
                }
                if (player.position.x < transform.position.x)
                {
                    direccion             = 1;
                    transform.eulerAngles = new Vector3(0, 180, 0);
                }

                if (distaciaConPlayer > zonaAtaque)
                {
                    comportamiento = tipoDeComportamientoEnemy.persecucion;
                    StopCoroutine("ShootLaser");
                    line.enabled = false;
                    StopCoroutine("ShotEffect");
                }
            }
            break;
        }
    }