如何在Unity中测量事件后的时间(2D)
本文关键字:时间 2D 事件 Unity 测量 | 更新日期: 2023-09-27 17:59:04
我有一个游戏,我想为用户显示一个计时器,它将显示自触摸角色以来经过的时间。我找到了一个变通方法,起初看起来很好,但在进入游戏菜单后,重新开始游戏(而不是在Unity中停止游戏),我没有1、2、3…秒的时间,但时间更长。我认为问题在于使用Time.Time,即使用从项目开始(据我所知)经过的时间,我不能将其置空
这是我测量时间的代码:
elapsedTime = Time.time - startTime;
脚本中的elapsedTime和startTime变量为float。
我该如何解决这个问题?你能给我看一些更好的代码来测量活动后的时间吗?
有几种方法可以做到这一点。
使用当前方法,您可以缓存一个float,该float表示从菜单开始游戏的当前时间(我们称之为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;
这不是唯一的方法,而是一个例子。使用协同程序可能也很有用。这里有一个协程函数的例子,您也可以为自己的目的操作它。如果你有问题,请随时提问,我会尽力澄清的!
// 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);
}
下面是一个我认为您想要的示例。有点不清楚,但只需将其附加到一个对象上,将计时器设置为true即可启动它,将计时器设为false即可停止它。该示例运行10秒钟,打印到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;
}