Điều gì là sai với coroutine hồi sinh của tôi?


19

Tôi đang tạo một trò chơi 2D Platformer trong đó nếu người chơi rơi khỏi căn cứ / mặt đất thì tôi muốn người chơi hồi sinh ở trạm kiểm soát gần nhất. Tuy nhiên tôi muốn có một sự chậm trễ giữa người chơi rơi xuống đất và hồi sinh. Đây là phần mã của tôi để đạt được mục tiêu này:

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;

}

Điều này hoạt động tốt cho sự chậm trễ hồi sinh nhỏ như 1 hoặc 2 giây. Nhưng khi tăng độ trễ lên 5 giây, người chơi sau khi xuất hiện ở điểm kiểm tra gần nhất sẽ biến mất ngay lập tức và sau một vài lần lặp lại, người chơi xuất hiện lại.

Đây là thời gian trễ 2 giây Đây là thời gian trễ 2 giây

Đây là thời gian trễ 5 giây Đây là thời gian trễ 5 giây

Làm thế nào tôi có thể sửa lỗi này?


3
Yêu các ảnh chụp màn hình hoạt hình!
Konerak

1
còn được gọi là gifs
user1306322

Câu trả lời:


49

Điều này dường như không liên quan gì đến cách bạn thiết lập coroutine. Điều có lẽ đang xảy ra là người chơi có được gia tốc đủ cao trong khi rơi xuống để lướt qua mặt đất và máy va chạm rơi. Khi bạn di chuyển vị trí trong quá trình hồi sinh, nó vẫn sẽ rơi với tốc độ tương tự. Trong phương thức Hồi sinh của bạn, đôi khi sau dòng chờ của bạn, đặt vận tốc trở về 0 : GetComponent<Rigidbody2D>().velocity = Vector2.zero.


2
Lỗi chơi game rất tuyệt vời xD
Tom

11
Nói chung, bạn nên thiết lập lại càng nhiều trạng thái của nhân vật người chơi của bạn như bạn cần bên cạnh vị trí. Giống như sức khỏe, MP, đạn, v.v. Đừng quên thiết lập lại kẻ thù nếu đó là loại trò chơi đó.
quái vật ratchet

@Joe nhưng còn kẻ thù thì sao?
David Starkey

8
Liên quan: Trừ khi trò chơi của bạn dựa trên vật lý, nhiều người chơi có "tốc độ rơi tối đa" để cho phép ngã nhiều hơn (và tránh các lỗi như thế này).
bất chấp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.