O que há de errado com a minha rotina de Respawn?


19

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 Isto é para o atraso de 2 segundos

Isso ocorre pelo atraso de 5 segundos Isso ocorre pelo atraso de 5 segundos

Como posso consertar isso?


3
Adoro as imagens animadas!
— 213 Konerak

1
também conhecido como gifs
— user1306322 #

Respostas:


49

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.


2
Os bugs nos jogos são impressionantes xD
— Tom

11
De um modo mais geral, você deve redefinir o estado do seu personagem, além da posição. Como saúde, MP, munição, etc. Não se esqueça de redefinir os inimigos inimigos também, se for esse tipo de jogo.
— catraca aberração

@ Joe, mas e os amigos?
— David Starkey

8
Relacionado: A menos que seu jogo seja baseado na física, muitos jogadores de plataforma têm uma "velocidade máxima de queda" para permitir quedas mais controladas (e evitar erros como esse).
— desafiar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.