![](/img/trans.png)
[英]c# string initiates to “00-00-00-00-00-00-00-00-00-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.