【问题标题】:Unity3d Time.deltaTime and framerate issue [closed]Unity3d Time.deltaTime 和帧率问题 [关闭]
【发布时间】:2016-05-15 11:55:06
【问题描述】:

我正在创建一个游戏,其中玩家可以将某些任务分配给 npc,并且由于任务复杂性,它会花费很多时间(复杂任务需要 5 分钟,简单任务需要 1 分钟)。为此,我使用 Time.deltatime 创建了一个计时器。

Starttime = Starttime + Time.Deltatime;

但是根据统一文档 deltatime 是两帧之间的差异,所以现在在 pc 游戏上运行 60 帧,所以需要 60 帧才能完成一分钟,但在移动设备上需要的时间比要求的要长,所以请谁能告诉我如何解决这个问题

【问题讨论】:

  • 修复什么?您从文档中复制/粘贴某些内容,陈述要求,但没有提出问题,似乎认为我们为您编写了您的程序?
  • 任务时间应该怎么办?如果您只需要一个脚本来工作,那么保存开始时间并检查时间过去...
  • 我认为您误解了文档。 Time.deltaTime 是为了让你的游戏帧率独立,所以无论你运行多少帧,它都会花费相同的时间。例如。 60 fps 的 1 分钟任务需要 3600 帧,30 fps 需要 1800 帧,但仍然是 1 分钟。

标签: c# unity3d unityscript unity5


【解决方案1】:

永远不要出于任何原因使用 Time.deltaTime 或任何类似函数。

对于 Unity 的初学者,对于所有计时器和所有与时间相关的问题,只需使用 Invoke

您的代码将如下所示...

void Start()
 {
 Debug.Log("user begins task .. must complete in 60 seconds");
 Invoke("TimeIsUpForUser", 60f);
 } 

private void TimeIsUpForUser()
 {
 Debug.Log("time's up! user must be finished by now");
 }

就这么简单。

例如,您的整个代码可能看起来像这样......

void Start()
 {
 ShowMiniPuzzleOnScreen();
 Invoke("TimeIsUpForUser", 60f);
 } 

private void UserHasPlacedFinalPieceOfPuzzle()
 {
 MessageScreen("Congratulations! You get 100 coins!");
 balance += 100;
 CancelInvoke("TimeIsUpForUser");
 }

private void TimeIsUpForUser()
 {
 HideMiniPuzzle();
 PlaySadMusic();
 MessageScreen("You suck! You are too slow. You lose 50 points.");
 balance -= 50;
 }

【讨论】:

  • 感谢 Joe Blow 的帮助,但我想我误解了统一文档,请告诉我 Time.deltaTime 是否用于使游戏帧率独立,所以无论它运行多少帧,是否需要相同的时间?
  • 欢呼一定要记得使用Invoke。 @paulp
猜你喜欢
  • 1970-01-01
  • 2019-05-08
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多