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

时间:2014-04-19 12:32:57

标签: c# unity3d

我有一个游戏,其中我想为用户显示一个计时器,它将显示自触摸角色以来经过的时间。我找到了一个首先看起来很棒的解决方法,但是在我的游戏中进入菜单后,重新开始游戏(不是在Unity中停止游戏),我没有得到1,2,3 ......秒,但更大的时间。我认为问题在于使用Time.time,它使用从项目开始经过的时间(据我所知),我不能将其归零。

以下是我测量时间的代码:

elapsedTime = Time.time - startTime;

我在脚本中将elapsedTime和startTime变量设置为float。

我该如何解决这个问题?你能告诉我可能更好的代码来衡量一个事件后的时间吗?

2 个答案:

答案 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);
}