如何增加死亡与重置等级之间的等待时间。 C#

时间:2019-05-15 00:36:49

标签: c# unity3d

我是Unity和C#的新手,我正在尝试为我的死亡脚本添加“等待时间”。因此,当我的玩家死亡时,它会显示一个粒子动画,然后重新设置关卡,但是,当我正在播放粒子时,关卡并没有重置。

公共GameObject粒子;     公开Player_Movement玩家;

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 个答案:

答案 0 :(得分:2)

    Destroy(gameObject);
    StartCoroutine("RestartGameCo");

您的代码很好,但是您要销毁上面带有此脚本的游戏对象。这也会破坏脚本,并停止所有协程。因此它将永远不会被调用。

一种解决方案是使对象以某种方式不可见,例如禁用网格渲染器和对撞机而不是销毁它。

答案 1 :(得分:0)

我对此有几种选择。这是一个。

通过使用Thread,它将暂停您的申请一段时间。为此,您需要向正在编辑的当前cs文件中添加using System.Threading;。现在,只需将代码更改为:

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");
}

答案 2 :(得分:0)

实际上,您甚至在运行协同例程之前就已经破坏了游戏对象本身。这意味着协同例程“ 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");
}

让我知道是否有帮助。