我有一个秒表在一个场景(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中包含的值,一次又一次地得到了以下代码的答案:
timer += Time.deltaTime;
mins = Mathf.FloorToInt(timer / 60F);
secs = Mathf.FloorToInt(timer - mins * 60);
stopwatch.text = string.Format("{0:00}:{1:00}", mins, secs);发布于 2015-05-28 02:03:57
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);
}https://stackoverflow.com/questions/30495789
复制相似问题