3

I'm using Unity3D to setup an "experiment" (university related) where I designed a maze and users receive subliminal cues (visual arrows displayed on the screen) that should appear just for 14 milliseconds and then disappear.

我已经设计了 3D 迷宫并且它真的很小(我不需要任何花哨的实验),因此当我使用第一人称控制器导航时我可以达到 1000fps(帧率不会成为问题)。我打算在 C# 中编写一个脚本,以在触发某些对象时显示这些箭头。

我想知道在 Unity 中是否可以仅以可接受的精度显示对象几毫秒(在我的情况下为 14 毫秒)......如果是这样,我应该使用哪种方法?有类似问题的任何想法或以前的经验吗?

先感谢您

4

2 回答 2

5

使用协程只显示对象一段时间:

void *AnyTrigger*() // eg. replace with OnTriggerEnter if using triggers
{
    StartCoroutine(ShowObject(14f / 1000f));
}

IEnumerator ShowObject(float timeInSeconds)
{
    // Show object here
    yield return new WaitForSeconds(timeInSeconds);
    // Hide object
}

准确性

显示对象时间的准确性在很大程度上取决于您使用的系统。如果您在快速系统上运行 Unity3D,它可能非常准确。如果系统很慢,时间很可能超过 14 毫秒。

例子(不准确):

  • 快速系统,每秒 950-1000 帧:可能在 0 毫秒到 1 毫秒之间
  • 中等系统,每秒 300-600 帧:可能在 0.8 毫秒和 3.6 毫秒之间
  • 慢速系统,每秒 50-100 帧:可能在 5ms 和 20ms 之间
于 2012-10-18T10:46:06.947 回答
1

你也可以使用System.Diagnostics.Stopwatch你的时间。

http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

可能更准确,因为它是按操作系统时间而不是 Unity 的内部时间保持的。

IEnumerator ShowObject(float timeInSeconds) {
    var stopwatch = new System.Diagnostics.Stopwatch();
    // Show object here
    stopwatch.Start();
    while (stopwatch.ElapsedMilliseconds < 14) {
        yield return null;
    }
    // Hide object
    stopwatch.Stop();
}
于 2012-10-18T18:55:06.480 回答