Estou criando um jogo de plataformas 2D no qual, se o jogador cair da base / solo, quero que o jogador reapareça no ponto de verificação mais próximo. No entanto, quero que haja um atraso entre o jogador que cai do chão e o ressurgimento. Esta é a seção do meu código para atingir 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;
}
Isso funciona bem para pequenos atrasos de reaparecimento, como 1 ou 2 segundos. Mas, ao aumentar o atraso para 5 segundos, o jogador depois de aparecer no ponto de verificação mais próximo desaparece em um instante e, depois de algumas repetições, o jogador reaparece.
Isso ocorre pelo atraso de 2 segundos
Isso ocorre pelo atraso de 5 segundos
Como posso consertar isso?
unity
coroutines
Debarun Mukherjee
fonte
fonte
Respostas:
Isso não parece ter nada a ver com a forma como você configura a corotina. O que provavelmente está acontecendo é que o jogador recebe uma aceleração alta o suficiente enquanto cai para ultrapassar o solo e o colisor de precipitação. Quando você move a posição durante o reaparecimento, ela ainda estará caindo na mesma taxa. No seu método de Respawn, algum tempo depois de sua linha de espera, definir a volta velocidade para zero:
GetComponent<Rigidbody2D>().velocity = Vector2.zero
.fonte