如何在Unity中测量事件后的时间(2D)

本文关键字:时间 2D 事件 Unity 测量 | 更新日期: 2023-09-27 17:59:04

我有一个游戏,我想为用户显示一个计时器,它将显示自触摸角色以来经过的时间。我找到了一个变通方法,起初看起来很好,但在进入游戏菜单后,重新开始游戏(而不是在Unity中停止游戏),我没有1、2、3…秒的时间,但时间更长。我认为问题在于使用Time.Time,即使用从项目开始(据我所知)经过的时间,我不能将其置空

这是我测量时间的代码:

elapsedTime = Time.time - startTime;

脚本中的elapsedTime和startTime变量为float。

我该如何解决这个问题?你能给我看一些更好的代码来测量活动后的时间吗?

如何在Unity中测量事件后的时间(2D)

有几种方法可以做到这一点。

使用当前方法,您可以缓存一个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;
        }