我在 Unity 中使用了 C# 秒表 Class,但它 returns 仅 00:00:00
I used the C# Stopwatch Class in Unity, but it returns only 00:00:00
我想测量 return 用户按下 Tab 键和 Space 按钮之间经过的时间。不幸的是我的代码只有 returns 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 ();
}
}
}
您在调用更新时正在重新创建秒表。您可以在 "constructor".
中初始化正手秒表
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 ();
}
}
您必须将 Stopwatch
的实例移到 Update
之外。目前,您每帧都在重新创建秒表。
所以将 zeit = new Stopwatch();
移到 Update
之外
private readonly Stopwatch zeit;
void Start()
{
zeit = new Stopwatch();
}
void Update()
{
//...
}
您在每个更新方法中创建了新的秒表:
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);
}
}
我认为问题在于您总是创建一个新对象并将其设置到 zeit 变量中,每个 Update 函数被引发。
因此,您只能创建该对象一次。
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 ();
}
}
应该先停下来。
if (Input.GetKeyDown ("space")){
//TimeSpan ts = zeit.Elapsed;
zeit.Stop ();
//print(ts);
print(zeit.Elapsed);
zeit.Reset ();
}
我想测量 return 用户按下 Tab 键和 Space 按钮之间经过的时间。不幸的是我的代码只有 returns 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 ();
}
}
}
您在调用更新时正在重新创建秒表。您可以在 "constructor".
中初始化正手秒表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 ();
}
}
您必须将 Stopwatch
的实例移到 Update
之外。目前,您每帧都在重新创建秒表。
所以将 zeit = new Stopwatch();
移到 Update
private readonly Stopwatch zeit;
void Start()
{
zeit = new Stopwatch();
}
void Update()
{
//...
}
您在每个更新方法中创建了新的秒表:
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);
}
}
我认为问题在于您总是创建一个新对象并将其设置到 zeit 变量中,每个 Update 函数被引发。
因此,您只能创建该对象一次。
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 ();
}
}
应该先停下来。
if (Input.GetKeyDown ("space")){
//TimeSpan ts = zeit.Elapsed;
zeit.Stop ();
//print(ts);
print(zeit.Elapsed);
zeit.Reset ();
}