Floating point Unity3d浮点精度限制

Floating point Unity3d浮点精度限制,floating-point,unity3d,Floating Point,Unity3d,我收到Unity3D Pro的警告,我不太明白。 我在GUI中将播放器的Transform.position.x设置为1000000,它给了我以下警告: 由于浮点精度的限制,建议将游戏对象的世界坐标设置在较小的范围内 这是否意味着我的单个场景必须小于1000000*1000000*1000000。这个足够大吗?如果我想要一个更大的世界,我需要多个场景?当一个新的场景被加载时,我的玩家的位置会被重置吗?如何管理位置数据,使其不超出范围?对于1000000量级的数字,IEEE-754 32位二进制浮

我收到Unity3D Pro的警告,我不太明白。 我在GUI中将播放器的Transform.position.x设置为1000000,它给了我以下警告:

由于浮点精度的限制,建议将游戏对象的世界坐标设置在较小的范围内


这是否意味着我的单个场景必须小于1000000*1000000*1000000。这个足够大吗?如果我想要一个更大的世界,我需要多个场景?当一个新的场景被加载时,我的玩家的位置会被重置吗?如何管理位置数据,使其不超出范围?

对于1000000量级的数字,IEEE-754 32位二进制浮点的步长为1/16(.0625)。因此,1000000以上的下一个数字是1000000.0625

如果您有一个肉眼看不到.0625变化的视图,这可能很好。如果世界中对象的比例是.0625比任何对象特征小得多,并且视图将永远不会放大到人眼可以注意到的.0625差异的地方,则可能没有问题。(但是,您可能需要多一点回旋余地。即使该尺寸的对象特征不可见,某些数学可能会受到影响,因为在对1000000量级的数字进行32位算术时,速度、位置等的任何计算都不能使用小于.0625的增量。)

将其与原点附近的数字进行比较,比如100级的数字。100时,步长为1/131072(.00000 762939453125)。如果您正在绘制利用此精细分辨率的对象,只要它们靠近原点,它们的外观就会很好。但是,当它们在场景中移动到坐标大小较大的位置时,它们将失去分辨率


这里的基本问题是场景大小与场景中细节大小之间的比率。这是有限的。只要对象特征也较大,就可以使用较大的坐标。但当坐标较大时,无法保持精细的对象特征。

警告是关于精度,而不是范围。标准化32位IEEE 754浮点有效地具有24位精度。这大约是7位小数,因此警告是适当的。