我想测量并返回用户按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 ();
}
}
}
答案 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 ();
}