Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Solución del reto: daño a Personaje y Enemigos

17/40
Recursos

Aportes 15

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Además de hacer el daño al enemigo intente hacer que solo se puedan disparar una cantidad finita de balas (10), no me salió; también intente hacer que el enemigo haga daño constantemente, adaptando un código parecido al de la cadencia de la bala, es decir, que haga daño si nos está tocando cada ciertos segundos (1 o 2) tampoco me salió y en unos de los intentos me dio un pantallazo azul jaja.

hice mas o menos lo mismo que en el video, solo añadí que el enemigo haga daño cada X segundos, para eso use un coroutine como la que usamos en el recargador de balas y además use la método OnTriggerStay, un dato curioso, cuando ponía que la couroutine hiciera daño cada 3 segundos o mas no mataba al jugador, creo que el motivo es que la posición del enemigo y del player era exactamente la misma y se terminaba la collision.

Mi solución
Reto 1

private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Enemy"))
        {
            healthP--;
            if (healthP <= 0)
            {
                Destroy(gameObject);
            }
        }
    }

Reto 2

public void TakeDamage()
    {
        health--;
        if (health <= 0)
        {
            Destroy(gameObject);
        }
    }

Yo coloqué un RigidBody 2D y Circle Collider 2D a mi Player. Solucioné el reto pero mi código es un poco diferente porque no creé un método TakeDamage para mi jugador sino que simplemente añadí líneas sin “meterlas” en un método. Pienso que no es muy eficiente pero solucioné el problema solo, ahora voy a seguir aprendiendo para mejorar la calidad de mi código.

Yo hice que el enemigo pueda morir, que la bala o el enemigo le puedas medificar el daño y que el player pueda morir, de momento solo desaparece…

Las corutinas, deben de ser declaradas con public, para ser usadas por otros objetos y clases.

Genial

Esta genial este curso 😃
Aparte del reto, les comento las cosas que pude hacer:

  • Logre hacer que el enemigo le dispare al player (cree un nuevo Prefab y script que sea propio de la bala del enemigo, le quite la condición de Input, y en vez de usar facingDirection use la variable de dirección para el Angulo del disparo).
  • Aparte del tiempo entre disparos, le agregué munición la cual se recarga luego de 5 disparos continuos en 2s. Esto con un else if que valide que tenemos 0 de municiones para llamar a una Coroutine que asigne nuevamente la cantidad de munición.

Mi solucion fue la siguiente

Use un Invoke para que cuando le hicieran daño al jugador, quedara “invulnerable por unos segundos” y le agregue un rigidbody al player

Esto es en el script del player

bool playerInmune = false;

private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Enemy") && !playerInmune)
        {
            health--;
            playerInmune = true;
            Invoke("EndInmune", 2); // De esta forma el jugador permanece inmune un momento para volver a recibir danho
        }
    }

    void EndInmune()
    {
        playerInmune = false;
    }

Y para el el segundo reto de destruir al enemigo

public void TakeDamage()
    {
        health--;
        if(health == 0)
        {
            Destroy(gameObject);
        }
    }

Todas las variables para quitarle vida al jugador lo puse en el mismo jugador. No en el enemigo

private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag(“Enemy”))
{
TakeDamage();
}
Yo use este metodo, aunque el enemigo choca con el jugador pienso que es mas divertido jeje xd

yo le puse rigidbody al player, igual funciono 😄

Lo que hice para remplazar el Game Over, fue
*Crear un prefab del player.
*Colocar un

if(playeHealth < 0)
        {
          Destroy(gameObject);
        }

para que se destruya y sea injugable (._."), y queda genial! jajaja.

mi solución fue al Script enemy agregarle una
variable llamada ForceAttack que será el daño que dará al personaje, y lo programe con un OnTriggerEnter

public float ForceAttack;

private void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == “Player”)
{
Player plr = other.GetComponent <Player>();
plr.RestarLife(ForceAttack);
}
}
al script del player hice que ese plr.RestarLife(ForceAttack);

sea compatible creando esta funcion

public float Life = 100f;

public void RestarLife(float DM)
{
Life -= DM;
}
despues para verificar que si la vida del enemigo esta en 0 para destruir el objeto hice esto 😄

e creado un simple verificador de daño de esta manera

public void Damage()
{
if (Life <= 0) {
Destroy (this.gameObject);
}
else
{
Life–;
}
}

Genial