C# 在Unity3D中显示对象几毫秒
我正在使用Unity3D设置一个“实验”(与大学相关),在这个实验中,我设计了一个迷宫,用户接收到的潜意识提示(屏幕上显示的视觉箭头)应该只出现14毫秒,然后消失 我已经设计了3D迷宫,它真的很小(我不需要任何花哨的实验),因此当我使用第一人称控制器导航到它时,我可以达到1000fps(帧速率不会有问题)。我计划用C语言编写一个脚本,在触发某些对象时显示这些箭头 我想知道在Unity中是否有可能以可接受的精度显示几毫秒(在我的例子中是14毫秒)的对象。。。如果是,我应该使用哪种方法?有没有类似问题的想法或经验C# 在Unity3D中显示对象几毫秒,c#,unity3d,C#,Unity3d,我正在使用Unity3D设置一个“实验”(与大学相关),在这个实验中,我设计了一个迷宫,用户接收到的潜意识提示(屏幕上显示的视觉箭头)应该只出现14毫秒,然后消失 我已经设计了3D迷宫,它真的很小(我不需要任何花哨的实验),因此当我使用第一人称控制器导航到它时,我可以达到1000fps(帧速率不会有问题)。我计划用C语言编写一个脚本,在触发某些对象时显示这些箭头 我想知道在Unity中是否有可能以可接受的精度显示几毫秒(在我的例子中是14毫秒)的对象。。。如果是,我应该使用哪种方法?有没有类似问
提前感谢使用协同程序只需一段时间即可显示对象:
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帧:可能在5到20毫秒之间
系统、诊断、秒表来计时
它可能更准确,因为它是按操作系统时间进行的,而不是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();
}
IEnumerator ShowObject(浮点时间分段){
var stopwatch=new System.Diagnostics.stopwatch();
//在此处显示对象
秒表。开始();
while(秒表时间延迟毫秒<14){
收益返回空;
}
//隐藏对象
秒表;
}
感谢您的回答:您认为该对象的显示时间是否准确?(例如,帧丢失,因此在某些周期内无法显示对象)@Albz不,它不会100%准确,我在回答中添加了更多信息。我不认为Unity没有使用系统时间!Unity使用内部计时,可以偏离系统时间。这就是为什么他们的Time.timeScale变量会降低游戏速度。此外,垃圾收集之类的事情可能会导致引擎暂时暂停,并使其时间与系统时间略有偏移。不过,unity必须渲染帧,因此与使用unity的内置时间系统相比,差异其实并不重要。