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 5 detik
Bagaimana saya bisa memperbaikinya?
unity
coroutines
Debarun Mukherjee
sumber
sumber
Jawaban:
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
.sumber