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ć?


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.


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ę
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.