Cosa c'è di sbagliato nella mia routine di Respawn?


19

Sto creando un gioco platform 2D in cui se il giocatore cade dalla base / terreno, voglio che il giocatore riappaia al checkpoint più vicino. Comunque voglio che ci sia un ritardo tra il giocatore che cade da terra e il respawn. Questa è la sezione del mio codice per raggiungere questo obiettivo:

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;

}

Funziona bene per piccoli ritardi di rigenerazione come 1 o 2 secondi. Ma aumentando il ritardo a 5 secondi, il giocatore dopo essere apparso al checkpoint più vicino svanisce in un istante e poi dopo alcune ripetizioni il giocatore ricompare.

Questo è per il ritardo di 2 secondi Questo è per il ritardo di 2 secondi

Questo è per il ritardo di 5 secondi Questo è per il ritardo di 5 secondi

Come posso risolvere questo problema?


3
Adoro gli screenshot animati!
Konerak,

1
noto anche come gif
user1306322,

Risposte:


49

Questo non sembra avere nulla a che fare con il modo in cui si configura la coroutine. Ciò che sta probabilmente accadendo è che il giocatore ottiene un'accelerazione abbastanza elevata mentre cade per glitch oltre il terreno e il fallout collider. Quando sposti la posizione durante il respawn, questa continuerà a cadere alla stessa velocità. Nel vostro metodo di Respawn, poco dopo la linea di attesa, impostare la parte posteriore di velocità a zero: GetComponent<Rigidbody2D>().velocity = Vector2.zero.


2
I bug di gioco sono fantastici xD
Tom

11
Più in generale dovresti ripristinare lo stato del personaggio del giocatore che devi oltre alla posizione. Come salute, MP, munizioni, ecc. Non dimenticare di resettare anche i nemici nemici se è quel tipo di gioco.
maniaco del cricchetto,

@Joe ma per quanto riguarda i frenemie?
David Starkey,

8
Correlati: a meno che il tuo gioco non sia basato sulla fisica, molti platform hanno una "velocità di caduta massima" per consentire cadute più controllate (ed evitare bug come questo).
Sfida
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.