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.