【发布时间】:2017-04-25 02:53:29
【问题描述】:
多年来使用各种游戏物理引擎进行开发,我注意到在同一台机器上,我观察到运行之间的物理模拟结果大相径庭。最近,Unity 引擎执行此操作,即使物理是按设定的时间间隔计算的 (FixedUpdate)——据我所知,它应该完全独立于帧速率。
我之前在游戏论坛上问过这个问题,并被告知这是由于混乱的运动:参见双摆。但是,如果启动条件得到精确控制,即使是双摆也是确定性的,对吧?在同一台机器上,浮点数学的行为不应该是一样的吗?
我了解浮点数学准确性存在问题,但我了解这些问题(如 here 所述)不是相同硬件上的问题——不是浮点不准确性还是确定性的?我错过了什么?
tl;dr:如果在同一台机器上运行模拟,使用相同的浮点数学(?),模拟不应该是确定性的吗?
非常感谢您的宝贵时间。
【问题讨论】:
-
@RyanVincent 浮点数是一个近似值,是的,但它们仍然是确定性的,因此混乱的系统应该没有影响。
-
值得注意的是,
FixedUpdate()确实不以一致的频率运行 (Time.fixedTime)。更改间隔只会更改在Update()之前调用FixedUpdate()的次数(以“赶上”),尽管具体数字会根据自上一帧以来经过的时间而有所不同。这是a little more info,了解实际情况。 -
@Serlite 找到相同的来源:) 相应地编辑了我的答案。
-
@RyanVincent 来自文章:“......那么我们现在是否在所有编译器和机器上都有确定性结果?没有。” (强调我的)请注意,在同一台计算机上,结果将是相同的。
标签: unity3d computer-science physics game-physics