Apa yang salah dengan Respawn coroutine saya?

19

Saya membuat game 2D Platformer di mana jika pemain jatuh dari pangkalan / tanah maka saya ingin pemain untuk respawn di pos pemeriksaan terdekat. Namun saya ingin ada penundaan antara pemain jatuh dari tanah dan respawn. Ini adalah bagian dari kode saya untuk mencapai tujuan ini:

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;

}

Ini berfungsi dengan baik untuk penundaan respawn kecil seperti 1 atau 2 detik. Tetapi pada peningkatan penundaan menjadi 5 detik, pemain setelah muncul di pos pemeriksaan terdekat menghilang dalam sekejap dan kemudian setelah beberapa kali pengulangan pemain muncul kembali.

Ini untuk penundaan waktu 2 detik Ini untuk penundaan waktu 2 detik

Ini untuk penundaan waktu 5 detik Ini untuk penundaan waktu 5 detik

Bagaimana saya bisa memperbaikinya?

Debarun Mukherjee
sumber
3
Cinta screenshot animasi!
Konerak
1
juga dikenal sebagai gifs
user1306322

Jawaban:

49

Ini sepertinya tidak ada hubungannya dengan bagaimana Anda mengatur coroutine. Apa yang mungkin terjadi adalah bahwa pemain mendapatkan akselerasi yang cukup tinggi saat jatuh untuk kesalahan melewati tanah dan collider kejatuhan. Ketika Anda memindahkan posisi selama respawn, itu akan tetap jatuh pada tingkat yang sama. Dalam metode Respawn Anda, kadang-kadang setelah baris menunggu Anda, mengatur kembali kecepatan nol: GetComponent<Rigidbody2D>().velocity = Vector2.zero.

tyjkenn
sumber
2
Bug permainan adalah xD yang luar biasa
Tom
11
Secara umum, Anda harus mengatur ulang status karakter pemain sebanyak yang Anda perlukan selain posisi. Seperti kesehatan, MP, amunisi, dll. Jangan lupa untuk mereset musuh musuh juga jika itu jenis permainan.
ratchet freak
@ Jo, tapi bagaimana dengan para frenemies?
David Starkey
8
Terkait: Kecuali jika gim Anda berbasis fisika, banyak platformer memiliki "kecepatan jatuh maks" untuk memungkinkan jatuh yang lebih terkontrol (dan menghindari bug seperti ini).
menentang