Как использовать ожидание между функциями Unity3D - PullRequest
0 голосов
/ 26 мая 2020
public class Bomb : MonoBehaviour
{
     IEnumerator OnTriggerEnter(Collider other)
    {
        if (other.tag == "Player")
        {
            other.GetComponent<ParticleSystem>().Play();
            Destroy(gameObject);
            yield return new WaitForSeconds(3f);
            SceneManager.LoadScene(5);
        }
    }
}

Я хочу загрузить сцену через 5 секунд функции OnTriggerEnter.

Система частиц работает, разрушение объекта работает.

Это бомба, я хочу, чтобы она успела взорваться перед переходом к другой сцене, а затем go к экрану потери

1 Ответ

0 голосов
/ 26 мая 2020

Вы не можете просто добавить IEnumerator к вашему событию триггера и ожидать, что он будет вызываться как сопрограмма. Это непроверенный код из памяти, но вы бы хотели сделать что-то вроде этого:

public class Bomb : MonoBehaviour
{
    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Player")
        {
            other.GetComponent<ParticleSystem>().Play();
            Destroy(gameObject);
            yield return StartCoroutine (DelayedLoadLevelCoroutine (5,3f));
        }
    }

    private IEnumerator DelayedLoadLevelCoroutine (int sceneBuildIndex, float delaySeconds)
    {
       yield return new WaitForSeconds(delaySeconds);
       SceneManager.LoadScene(sceneBuildIndex);
    }


}

Кроме того, какая конкретная причина, по которой вы используете LoadScene с индексом сборки, а не именем? Кажется, имя может иметь больше смысла в этом контексте:

LoadScene("LossScreen")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...