我在 Unity 中使用了 C# 秒表类,但它只返回 00:00:00
Posted
技术标签:
【中文标题】我在 Unity 中使用了 C# 秒表类,但它只返回 00:00:00【英文标题】:I used the C# Stopwatch Class in Unity, but it returns only 00:00:00 【发布时间】:2018-02-05 11:22:40 【问题描述】:我想测量并返回用户按下 Tab 和 Space 按钮之间的时间。不幸的是,我的代码只返回 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 ();
【问题讨论】:
您正在为每一帧创建一个新的Stopwatch
。您想将zeit = new Stopwatch();
移到Update
之外(例如在Start
中?)
【参考方案1】:
应该先停下来。
if (Input.GetKeyDown ("space"))
//TimeSpan ts = zeit.Elapsed;
zeit.Stop ();
//print(ts);
print(zeit.Elapsed);
zeit.Reset ();
【讨论】:
无需停止即可获取经过的时间。【参考方案2】:我认为问题在于您总是创建一个新对象并将其设置到 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 ();
【讨论】:
【参考方案3】:您为每个更新方法创建新的秒表:
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】:您必须将Stopwatch
的实例化移动到Update
之外。目前,您正在每帧重新创建秒表。
所以将zeit = new Stopwatch();
移到Update
之外
private readonly Stopwatch zeit;
void Start()
zeit = new Stopwatch();
void Update()
//...
【讨论】:
【参考方案5】:调用更新时,您正在重新创建秒表。您可以在“构造函数”中初始化正手秒表。
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 ();
【讨论】:
以上是关于我在 Unity 中使用了 C# 秒表类,但它只返回 00:00:00的主要内容,如果未能解决你的问题,请参考以下文章
我在 Angular 中使用动态编译器,但它只适用于视图引擎,但不推荐使用视图引擎
使用 TransferSpreadsheet 导入 Excel 电子表格时出错