我有一个游戏,其中我想为用户显示一个计时器,它将显示自触摸角色以来经过的时间。我找到了一个首先看起来很棒的解决方法,但是在我的游戏中进入菜单后,重新开始游戏(不是在Unity中停止游戏),我没有得到1,2,3 ......秒,但更大的时间。我认为问题在于使用Time.time,它使用从项目开始经过的时间(据我所知),我不能将其归零。
以下是我测量时间的代码:
elapsedTime = Time.time - startTime;
我在脚本中将elapsedTime和startTime变量设置为float。
我该如何解决这个问题?你能告诉我可能更好的代码来衡量一个事件后的时间吗?
答案 0 :(得分:1)
这是我认为你想要的一个例子。有点不清楚但只是将它附加到一个对象,将timer设置为true以启动它并将timer设置为false以停止它。该示例运行十秒钟打印到Debug.Log并停止。
#pragma strict
var timer : boolean = false;
var tTime : float;
function Update()
{
if (timer)
{
tTime += Time.deltaTime;
}
else
{
tTime = 0; // Reset
}
Debug.Log(tTime);
}
function Start ()
{
timer = true;
yield WaitForSeconds(10);
timer = false;
}
答案 1 :(得分:1)
有几种方法可以做到这一点。
使用您当前的方法,您可以缓存一个浮点数,表示从菜单开始游戏时的当前时间(让我们称之为continueTime
)。
这将考虑返回菜单系统等,因为您始终可以通过执行以下操作获得增量:
currentTime = Time.time - continueTime; // this will be the equivalent of elapsed time since you started this iteration of the game.
你甚至可以为此目的制作一种方法:
public static float GetCurrentTimeOffset(float continueTime)
{
return Time.time - continueTime;
}
你如何缓存时间取决于你,但这是一种方法。
从那里,您可以使用常规方法比较您的经过时间:
elapsedTime = GetCurrentTimeOffset(continueTime) - startTime;
这不是唯一的方法,而是一个例子。使用协程也可能有用。这是一个coroutine函数的例子,你也可以为你操作。如果你有问题,请随时提问,我会尽力澄清!
// Parameter: seconds is the time delay between touching the character and
// returning out of the coroutine.
public IEnumerator TouchTimer(int seconds)
{
yield return new WaitForSeconds(seconds);
}