簡體   English   中英

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

[英]I used the C# Stopwatch Class in Unity, but it returns only 00:00:00

我想測量並返回用戶按下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 ();
        }
    }
}
    

您在調用更新時正在重新創建秒表。 您可以在“構造函數”中正手初始化秒表。

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 ();
    }
}

我認為問題是您總是創建一個新對象並將其設置為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 ();
        }
    }

您必須將Stopwatch的實例移動到Update之外。 當前,您正在每幀重新創建秒表。

所以移動zeit = new Stopwatch(); Update之外

private readonly Stopwatch zeit;

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

void Update()
{
  //...
}

您為每個Update方法創建新的Stopwatch:

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

應該先停下來。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM