6

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

“由于浮点精度限制,建议将GameObject的世界坐标带在更小的范围内。”

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

4

1 回答 1

13

对于数量级为 1,000,000 的数字,IEEE-754 32 位二进制浮点的步长为 1/16 (.0625)。因此,下一个高于 1,000,000 的可表示数字是 1,000,000.0625。

如果您有一个肉眼看不到 0.0625 变化的视图,那可能会很好。如果您世界中对象的比例使得 0.0625 远小于任何对象特征,并且视图永远不会放大到人眼可以察觉到 0.0625 差异的位置,那么可能没有问题。(但是,您可能需要更多的余地。即使该大小的对象特征不可见,某些数学运算也可能会受到影响,因为速度、位置等的任何计算都不能使用小于 0.0625 的增量,而您正在对大小为 1,000,000 的数字进行 32 位运算。)

将其与原点附近的数字进行比较,例如大小为 100 的数字。在 100 处,步长为 1/131072 (.00000762939453125)。如果您正在绘制利用这种精细分辨率的对象,只要它们靠近原点,它们就会看起来很好。但是,当它们通过您的场景移动到坐标幅度较大的地方时,它们会失去分辨率。

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

于 2013-06-02T13:27:09.680 回答