Что не так с моей сопрограммой Respawn?


19

Я создаю 2D-платформерную игру, в которой, если игрок падает с основания / земли, я хочу, чтобы игрок возродился на ближайшей контрольной точке. Однако я хочу, чтобы между падением игрока и респауном произошла задержка. Это раздел моего кода для достижения этой цели:

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
Люблю анимированные скриншоты!
Конерак

1
также известный как ГИФС
user1306322

Ответы:


49

Похоже, это не имеет никакого отношения к настройке сопрограммы. Вероятно, происходит то, что игрок получает достаточно высокое ускорение при падении, чтобы промахнуться через землю и коллайдер радиоактивных осадков. Когда вы перемещаете позицию во время респауна, она все равно будет падать с той же скоростью. В вашем методе Respawn, где- то после ожидания линии, установите скорость обратно к нулю: GetComponent<Rigidbody2D>().velocity = Vector2.zero.


2
Игровые ошибки потрясающие xD
Tom

11
В более общем случае вы должны сбросить столько состояний персонажа, сколько вам необходимо, помимо позиции. Как здоровье, MP, боеприпасы и т. Д. Не забывайте сбрасывать врагов врагов, если это такая игра.
фрик с трещоткой

@ Джо, а как насчет врагов?
Дэвид Старки

8
Связанный: Если ваша игра не основана на физике, многие платформеры имеют «максимальную скорость падения», чтобы обеспечить более контролируемые падения (и избегать подобных ошибок).
игнорировать
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.