我在游戏的一个场景(stage_A)中有一个秒表。当我启动场景(菜单)时,此场景中的计时器(stage_A)开始计数,我无法找到原因。我希望它只在加载场景(stage_A)时才开始计数。以下是我的代码:
主摄像机上的脚本stage_A:
public Text stopwatch;
void Update ()
{
if(Application.loadLevel != 1)
return;
//Display format 00:00
var secs = (int)(Time.time % 60);
var mins = (int)(Time.time / 60);
stopwatch.text = string.Format("{0:00}:{1:00}", mins, secs);
}
脚本菜单:
public void Play()
{
StartGame.current = new StartGame();
StartGame.current.Character.name = name;
SaveLoad.Save();
Application.LoadLevel("stageA");
}
在构建设置中,索引场景菜单为0,场景stage_A为1。
溶液:
if (startTime == 0.0)
startTime = Time.time;
else
{
secs = (int)((Time.time % 60) - startTime);
mins = (int)(Time.time / 60);
txttempo.text = string.Format("{0:00}:{1:00}", mins, secs);
}
校正:
经过一些测试后,我意识到当变量secs
达到“00:57”时,秒表再次重新计算减去startTime
中包含的值,一看后再次得到以下代码的答案: / p>
timer += Time.deltaTime;
mins = Mathf.FloorToInt(timer / 60F);
secs = Mathf.FloorToInt(timer - mins * 60);
stopwatch.text = string.Format("{0:00}:{1:00}", mins, secs);
答案 0 :(得分:2)
Time.time
的文档说:
这是自比赛开始以来的秒数。
因此,我不确定为什么你希望它在加载舞台后给你几秒钟。您需要将值保存在您希望它开始的第一帧上,然后在更新中从当前值Time.time
中减去保存的值。这会给你一个秒表效果。
类似的东西:
private float startTime = 0.0F;
void Update ()
{
if(Application.loadLevel != 1)
return;
if(startTime == 0.0) startTime = Time.time;
var counter = Time.time - startTime;
//Display format 00:00
var secs = (int)(counter % 60);
var mins = (int)(counter / 60);
stopwatch.text = string.Format("{0:00}:{1:00}", mins, secs);
}