เกิดอะไรขึ้นกับ coroutine respawn ของฉัน?


19

ฉันกำลังสร้างเกม 2D Platformer ซึ่งหากผู้เล่นตกลงจากฐาน / พื้นดินฉันต้องการให้ผู้เล่นเกิดที่จุดตรวจที่ใกล้ที่สุด อย่างไรก็ตามฉันต้องการให้มีความล่าช้าระหว่างผู้เล่นล้มลงจากพื้นและเกิดใหม่ นี่คือส่วนของรหัสของฉันเพื่อให้บรรลุเป้าหมายนี้:

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;

}

วิธีนี้ใช้งานได้ดีสำหรับการเกิดใหม่ล่าช้าประมาณ 1 หรือ 2 วินาที แต่เมื่อเพิ่มการหน่วงเวลาเป็น 5 วินาทีผู้เล่นหลังจากที่ปรากฏที่จุดตรวจที่ใกล้ที่สุดหายตัวไปในทันทีและหลังจากนั้นไม่กี่ครั้งผู้เล่นก็ปรากฏขึ้นอีกครั้ง

นี่คือการหน่วงเวลา 2 วินาที นี่คือการหน่วงเวลา 2 วินาที

นี่คือการหน่วงเวลา 5 วินาที นี่คือการหน่วงเวลา 5 วินาที

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


3
รักภาพหน้าจอเคลื่อนไหว!
Konerak

1
หรือที่เรียกว่าgif
user1306322

คำตอบ:


49

ดูเหมือนจะไม่มีอะไรเกี่ยวข้องกับวิธีการตั้งค่า coroutine สิ่งที่อาจเกิดขึ้นคือผู้เล่นได้รับความเร็วที่สูงพอในขณะที่ล้มลงทันทีที่ผ่านพื้น เมื่อคุณย้ายตำแหน่งในระหว่างการเกิดใหม่มันจะยังคงลดลงในอัตราเดียวกัน ในวิธีการ Respawn GetComponent<Rigidbody2D>().velocity = Vector2.zeroของคุณบางครั้งหลังจากบรรทัดรอคุณตั้งค่าความเร็วกลับมาให้เป็นศูนย์:


2
ข้อบกพร่องในการเล่นเกมนั้นยอดเยี่ยม xD
Tom

11
โดยทั่วไปคุณควรรีเซ็ตสถานะของตัวละครของคุณให้มากที่สุดเท่าที่คุณต้องการนอกเหนือจากตำแหน่ง เช่นเดียวกับสุขภาพ MP, กระสุน ฯลฯ อย่าลืมรีเซ็ตศัตรูของศัตรูด้วยเช่นกันถ้าเป็นเกมประเภทนั้น
วงล้อประหลาดที่

@ โจ แต่แล้วเรื่องบ้าคลั่งล่ะ?
David Starkey

8
ที่เกี่ยวข้อง: หากเกมของคุณเป็นแบบฟิสิกส์พื้นฐาน platformers จำนวนมากจะมี "ความเร็วการตกสูงสุด" เพื่อให้สามารถควบคุมการตกได้มากขึ้น (และหลีกเลี่ยงข้อบกพร่องเช่นนี้)
ท้า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.