我在Unity中使用了C#秒表类,但它只返回00:00:00

时间:2017-08-28 08:29:34

标签: c# .net unity3d stopwatch

我想测量并返回用户按Tab键和时间之间经过的时间。太空按钮。不幸的是我的代码只返回00:00:00。到目前为止,这是我的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading;
using System;
using System.Diagnostics;
using Debug=UnityEngine.Debug;
public class timer : MonoBehaviour {
    public Stopwatch zeit;
    void Update () {
        zeit = new Stopwatch();
        if (Input.GetKeyDown ("tab")) {
            zeit.Start();
        }

        if (Input.GetKeyDown ("space")){
            TimeSpan ts = zeit.Elapsed;
            zeit.Stop ();
            print(ts);
            zeit.Reset ();
        }
    }
}
    

5 个答案:

答案 0 :(得分:4)

调用更新时,您正在重新创建秒表。您可以在"构造函数"。

中正手初始化秒表
public Stopwatch zeit = new StopWatch();
void Update () {
    if (Input.GetKeyDown ("tab")) {
        zeit.Start();
    }

    if (Input.GetKeyDown ("space")){
        TimeSpan ts = zeit.Elapsed;
        zeit.Stop ();
        print(ts);
        zeit.Reset ();
    }
}

答案 1 :(得分:3)

我认为问题是你总是创建一个新对象并将其设置为 zeit 变量,每个更新函数都会被引发。

因此,您必须只创建一次该对象。

zone.js

答案 2 :(得分:2)

您必须在Stopwatch之外移动Update的实例化。目前,您正在每帧重新创建秒表。

所以将zeit = new Stopwatch();移到Update

之外
private readonly Stopwatch zeit;

void Start() 
{
    zeit = new Stopwatch();
}

void Update()
{
  //...
}

答案 3 :(得分:2)

您可以为每个更新方法创建新的秒表:

void Update () {
    zeit = new Stopwatch();

不要这样做,而是尝试这种方法:

private readonly Stopwatch _zeit = new Stopwatch();

void Update ()
{
    if (Input.GetKeyDown ("tab"))
    {
        _zeit.Restart();
    }

    if (Input.GetKeyDown ("space")
    {
        print(_zeit.Elapsed);
    }
}

答案 4 :(得分:0)

应该先停止。

if (Input.GetKeyDown ("space")){
  //TimeSpan ts = zeit.Elapsed;
  zeit.Stop ();
  //print(ts);
  print(zeit.Elapsed);
  zeit.Reset ();
}