Как добавить время ожидания между смертью и сбросом уровня.C # - PullRequest
1 голос
/ 15 мая 2019

Я новичок в Unity и C #, я пытаюсь добавить «время ожидания» в мой сценарий смерти. Поэтому, когда мой игрок умирает, он показывает анимацию частиц, а затем сбрасывает уровень, однако, в тот момент, когда мои частицы играют, но уровень не сбрасывается.

общедоступные частицы GameObject; public Player_Movement player;

void OnCollisionEnter2D(Collision2D Col)
{
    if (Col.collider.tag == "Enemy")
    {
        Instantiate(particles, transform.position, Quaternion.identity);
        Destroy(gameObject);
        StartCoroutine("RestartGameCo");
    }
}
public IEnumerator RestartGameCo()
{
    yield return new WaitForSeconds(0.5f);
    SceneManager.LoadScene("Level1");
}

Ответы [ 3 ]

2 голосов
/ 15 мая 2019
    Destroy(gameObject);
    StartCoroutine("RestartGameCo");

Ваш код в порядке, но вы уничтожаете игровой объект, на котором есть этот скрипт. Что также разрушает сценарий и останавливает все сопрограммы. Так что это никогда не будет называться.

Решение состоит в том, чтобы каким-то образом сделать объект невидимым, например отключить рендерер мешей и коллайдер вместо того, чтобы уничтожать его.

0 голосов
/ 15 мая 2019

Вы фактически уничтожаете сам игровой объект, даже не запуская сопрограмму.Это означает, что подпрограмма «RestartGameCo» даже не запускается.Один из способов отладки подобных вещей - использование сообщений Debug.log.

Код:

void OnCollisionEnter2D(Collision2D Col)
{
    if (Col.collider.tag == "Enemy")
    {
        Instantiate(particles, transform.position, Quaternion.identity);
        StartCoroutine("RestartGameCo");
    }
}
public IEnumerator RestartGameCo()
{
    yield return new WaitForSeconds(0.5f);
    SceneManager.LoadScene("Level1");
}

Дайте мне знать, если это поможет.

0 голосов
/ 15 мая 2019

Я знаю пару вариантов об этом. Вот один.

Используя Thread, ваше приложение будет приостановлено на столько времени, сколько вы пожелаете. Для этого вам нужно добавить using System.Threading; в текущий файл CS, который вы редактируете. Теперь просто измените свой код так:

void OnCollisionEnter2D(Collision2D Col)
{
    Thread.Sleep(5000) // 5000 in milliseconds
    if (Col.collider.tag == "Enemy")
    {
        Instantiate(particles, transform.position, Quaternion.identity);
        Destroy(gameObject);
        StartCoroutine("RestartGameCo");
    }
}
public IEnumerator RestartGameCo()
{
    Thread.Sleep(5000)
    yield return new WaitForSeconds(0.5f);
    SceneManager.LoadScene("Level1");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...