在Unity3D中显示一个对象几毫秒
我正在使用Unity3D来设置一个“实验”(大学相关),我设计了一个迷宫,用户接收潜意识提示(屏幕上显示的可视箭头),它应该只显示14毫秒然后消失。
我已经设计了3D迷宫并且它真的很小(我不需要任何花哨的实验),因此当我用第一人称控制器导航时我可以达到1000fps(帧速率不会有问题)。 我打算用C#编写脚本,以便在触发某些对象时显示这些箭头。
我想知道在Unity中是否可以只用几毫秒(在我的情况下,14ms)显示具有可接受精度的对象……如果是这样,我应该使用哪种方法? 有类似问题的任何想法或以前的经验吗?
先感谢您
使用协程只显示一段时间的对象:
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帧:在0ms和1ms之间
- 中型系统,每秒300-600帧:在0.8ms到3.6ms之间
- 慢速系统,每秒50-100帧:在5ms到20ms之间
您也可以使用System.Diagnostics.Stopwatch
来计算时间。
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
它可能更准确,因为它是通过OS时间而不是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(); }