我写了一个简单的计时器脚本,在计时器达到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);
}
}
}
答案 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吗?