No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Usando los PowerUps

23/40
Recursos

Aportes 9

Preguntas 1

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Un powerup que se me ocurre es el de la propia invulnerabilidad por unos segundos.

Mi implementaci贸n de la vulnerabilidad es crear una clase Invulnerabilidad que se encargue de contar el tiempo para que se acabe la invulnerabilidad:

Y luego configurarlo en un evento que cre茅 llamado onReceiveDamage. Cuando reciba da帽o, el jguador se volver谩 invulnerable por 5 segundos como est谩 configurado en la figura de arriba. El componente Damageable tiene una referencia al componente Invulnerability y antes de que reciba da帽o, primero verificar谩 si es que el objeto es vulnerable.

Un PowerUp que simule una escopeta (3 balas a la vez pero una menor distancia o tiempo de vida de las balas).

POWERUP SANADOR!

Mi soluci贸n

bool hasCooldown = false;
private void OnTriggerEnter2D(Collider2D collision)
    {
        if(!hasCooldown)
        {
            if (collision.CompareTag("Enemy"))
            {
                healthP--;
                hasCooldown = true;
                StartCoroutine(Cooldown());
                if (healthP <= 0)
                {
                    Destroy(gameObject);
                }
            }
        }

        if (collision.CompareTag("PowerUp"))
        {
            switch (collision.GetComponent<PowerUp>().powerUpType)
            {
                case PowerUp.PowerUpType.FireRateIncrease:
                    fireRate++;
                    break;
                case PowerUp.PowerUpType.PowerShot:
                    powerShotEnable = true;
                    break;
            }
            Destroy(collision.gameObject, 0.1f);
        }
    }
    IEnumerator Cooldown()
    {
        yield return new WaitForSeconds(3f);
        hasCooldown = false;

        StopCoroutine(Cooldown());
    }

Mi solucion:

En el enemigo tengo el llamado de la funcion TakeDamage() del player:

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
            collision.GetComponent<Player>().TakeDamage();
        }
    }

Y en el player le hice un cambio a la funcion TakeDamage():

bool takeDamageCooldown = true;

    public void TakeDamage()
    {
        if (takeDamageCooldown)
            playerHealth--;
        takeDamageCooldown = false;
        StartCoroutine(TakeDamageCooldown());

        if (playerHealth <= 0)
        {
            //GameOver
        }
    }

    IEnumerator TakeDamageCooldown()
    {
        yield return new WaitForSeconds(3f);
        takeDamageCooldown = true;
    }

Genial

Lo que yo hice fue:

  1. Cree dos variables en el script de player una de tipo int que ser铆a el tiempo de duraci贸n de la invulnerabilidad, llamada invulnerabilityTime, y otra de tipo booleano, llamada invulnerability, (que por default estar铆a en false) para determinar si el personaje es invulnerable o no:

  2. En el m茅todo TakeDamage() que creamos en clases anteriores, en el que el personaje recib铆a da帽o, puse como condici贸n que la variable booleana invulnerability deb铆a estar en false para que se ejecutara el mecanismo de reducir la vida del personaje:

  3. Por ultimo, agregue un caso nuevo la secci贸n de las colisiones del personaje con los power ups (Obviamente para lograr esto, previamente aumente el array de power ups existentes en el script PowerUp, y agregu茅 uno llamado Invulnerability). En este nuevo caso especifiqu茅 que el booleano invulnerability cambiara su valor a true, evitando que el personaje pierda vida al colisionar con enemigos (ya que como mencione anteriormente !invulnerability era una condicion para perder vida), y adem谩s agregue una corrutina que se encargar谩 de esperar unos segundos determinados por la variable invulnerabilityTime (para no tener numeros m谩gicos) y despues de este tiempo regresaria a la variable booleana invulnerability a su estado default que es false:

Un power up que se me ocurre es paralizar a los enemigos y tambi茅n desactivarles el da帽o en lo que dura el efecto.

Destroy tiene la opci贸n de retrasar un poco el efecto, de forma que se sienta un tanto natural.