计时器不断加载场景而不是一次

时间:2017-01-16 00:18:15

标签: c# unity3d

我写了一个简单的计时器脚本,在计时器达到0后,它会加载一个新的场景。但它不断加载场景,而不是一次不允许它加载的场景。我只需要加载场景一次。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.SceneManagement;

public class Timer : MonoBehaviour
 {
public float timelimit;
public Text text;

public void ChangeScene(int changeTheScene)

{
    SceneManager.LoadScene(changeTheScene);
}

void Update()
{
    timelimit -= Time.deltaTime;
    text.text = "TimerText:" + Mathf.Round(timelimit);
    if (timelimit < 0)
    {
        timelimit = 0;
        SceneManager.LoadScene(1);
    }
  }
}

2 个答案:

答案 0 :(得分:3)

注意:所描述的代码不会导致您描述的问题。我看到两种可能性:

  • 您新加载的场景中包含相同的组件,该组件会重复加载场景
  • 您实际上正在加载场景加法,以便此组件在加载后继续运行。

假设后者,如果你按照你的代码进行操作,你会发现你的if语句有一个条件,一旦达到时间限制,总是为真:

每一帧都从timelimit中减去一个数字。然后,如果timelimit现在小于零,请将timelimit设置为零并加载场景。

如果您在前一帧中将timelimit设置为零,然后减去一个数字,则始终小于零:您将始终在每个后续帧上再次加载场景。

请尝试使用布尔变量来跟踪您是否已加载场景。或者,在加载场景后立即销毁组件,以便代码停止运行。

如果问题实际上是你在新场景中有这个组件,那么......考虑删除它! : - )

修改

  

尝试使用布尔变量来跟踪您是否已加载   现场与否。

public class Timer : MonoBehaviour
{
    public float timelimit;
    public Text text;
    static bool loadedScene = false;

    public void ChangeScene(int changeTheScene)

    {
        //SceneManager.LoadScene(changeTheScene);
    }



    void Update()
    {
        //Exit if we have already loaded scene
        if (loadedScene)
        {
            //Destroy Timer Text
            Destroy(text.gameObject);
            //Destroy this Timer GameObject and Script
            Destroy(gameObject);
            return;
        }

        timelimit -= Time.deltaTime;
        text.text = "TimerText:" + Mathf.Round(timelimit);
        if (timelimit < 0)
        {
            timelimit = 0;
            loadedScene = true; //We have loaded Scene so mark it true
            SceneManager.LoadScene(1);
        }
    }
}

答案 1 :(得分:0)

您的时间限制可能未初始化。你确定它在Unity编辑器中没有设置为0吗?