Co jest nie tak z moją odrodzoną korupcją?

19

Tworzę grę platformową 2D, w której jeśli gracz spadnie z podstawy / ziemi, chcę, aby odrodził się w najbliższym punkcie kontrolnym. Chciałbym jednak, aby opóźnienie między spadnięciem gracza z ziemi a odrodzeniem się zakończyło. To jest sekcja mojego kodu, aby osiągnąć ten cel:

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;

}

Działa to dobrze w przypadku niewielkich opóźnień odrodzenia, takich jak 1 lub 2 sekundy. Ale po zwiększeniu opóźnienia do 5 sekund gracz po pojawieniu się w najbliższym punkcie kontrolnym znika w jednej chwili, a następnie po kilku powtórzeniach pojawia się ponownie.

Jest to 2-sekundowe opóźnienie Odnosi się to do 2-sekundowego opóźnienia

Jest to 5-sekundowe opóźnienie Jest to 5-sekundowe opóźnienie

Jak mogę to naprawić?

Debarun Mukherjee
źródło
3
Uwielbiam animowane zrzuty ekranu!
Konerak
1
znany również jako gify
użytkownik1306322

Odpowiedzi:

49

Wydaje się, że nie ma to nic wspólnego z tym, jak konfigurujesz coroutine. Prawdopodobnie dzieje się tak, że gracz uzyskuje wystarczająco duże przyspieszenie podczas upadku, aby przelecieć obok ziemi i zderzacza. Kiedy przesuniesz pozycję podczas odrodzenia, nadal będzie spadać w tym samym tempie. W swojej metodzie respawn, kiedyś po linii czekaj, ustawić z powrotem do zera prędkości: GetComponent<Rigidbody2D>().velocity = Vector2.zero.

tyjkenn
źródło
2
Błędy w grach są niesamowite xD
Tom
11
Mówiąc bardziej ogólnie, poza pozycją powinieneś zresetować tyle stanu postaci gracza, ile potrzebujesz. Jak zdrowie, PM, amunicja itp. Nie zapomnij zresetować wrogów również, jeśli jest to taka gra.
maniak zapadkowy
@Joe, ale co z wrogami?
David Starkey
8
Powiązane: O ile twoja gra nie jest oparta na fizyce, wielu platformówek ma „maksymalną prędkość opadania”, aby pozwolić na bardziej kontrolowane upadki (i uniknąć takich błędów).
przeciwstawić się