首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于Time.time?

关于Time.time?
EN

Stack Overflow用户
提问于 2015-05-28 01:32:53
回答 1查看 3K关注 0票数 0

我有一个秒表在一个场景(stage_A)我的游戏。当我启动场景(菜单)时,这个场景中的计时器(stage_A)开始计数,我无法找出原因。我希望它只在场景(stage_A)加载时才开始计数。以下是我的代码:

主摄像机上的脚本stage_A:

代码语言:javascript
运行
复制
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);
}

脚本菜单:

代码语言:javascript
运行
复制
public void Play()
{
   StartGame.current = new StartGame();
   StartGame.current.Character.name = name;
   SaveLoad.Save();
   Application.LoadLevel("stageA");   
}

在构建设置中,索引场景菜单为0,场景stage_A为1。

解决办法:

代码语言:javascript
运行
复制
  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中包含的值,一次又一次地得到了以下代码的答案:

代码语言:javascript
运行
复制
 timer += Time.deltaTime;

 mins = Mathf.FloorToInt(timer / 60F);
 secs = Mathf.FloorToInt(timer - mins * 60);
 stopwatch.text = string.Format("{0:00}:{1:00}", mins, secs);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-28 02:03:57

Time.time的文档说:

这是比赛开始后的几秒钟时间。

所以我不知道为什么你期待它给你在舞台加载后的几秒钟。您需要在希望它开始的第一帧上保存值,然后在更新中从Time.time的当前值中减去保存的值。这会给你一个秒表的效果。

类似于:

代码语言:javascript
运行
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30495789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档