关于Time.time?

时间:2015-05-28 01:32:53

标签: c# unity3d

我在游戏的一个场景(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);

1 个答案:

答案 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);
}