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.