Estoy creando un juego de Plataformas 2D en el que si el jugador se cae de la base / suelo, quiero que el jugador reaparezca en el punto de control más cercano. Sin embargo, quiero que haya un retraso entre la caída del jugador y la reaparición. Esta es la sección de mi código para lograr este objetivo:
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log(collision.tag);
if (collision.tag.Equals("Kill"))
{
StartCoroutine("Respawn");
}
else if(collision.tag.Equals("Checkpoint"))
{
Animator flag = collision.GetComponent<Animator>();
if (!flag.GetBool("hasCrossed"))
{
flagCounter++;
flag.SetBool("hasCrossed", true);
checkpoint = collision.gameObject.transform.position;
}
}
}
IEnumerator Respawn()
{
yield return new WaitForSeconds(respawnDelay);
transform.position = checkpoint;
}
Esto funciona bien para pequeños retrasos de reaparición como 1 o 2 segundos. Pero al aumentar el retraso a 5 segundos, el jugador después de aparecer en el punto de control más cercano desaparece en un instante y luego, después de varias repeticiones, el jugador vuelve a aparecer.
Esto es por el retraso de 2 segundos
Esto es por el retraso de 5 segundos
¿Cómo puedo arreglar esto?
unity
coroutines
Debarun Mukherjee
fuente
fuente
Respuestas:
Esto no parece tener nada que ver con la forma en que configura la rutina. Lo que probablemente esté sucediendo es que el jugador obtiene una aceleración lo suficientemente alta mientras cae para fallar más allá del suelo y el colisionador de consecuencias. Cuando mueves la posición durante la reaparición, seguirá cayendo a la misma velocidad. En el método de Respawn, algún tiempo después de su línea de espera, ajuste la parte de atrás de velocidad a cero:
GetComponent<Rigidbody2D>().velocity = Vector2.zero
.fuente