unity3D在任何时候优化漂浮吗?

时间:2016-10-17 19:16:48

标签: c# unity3d

我想知道是否有人知道如果团结在浮动引擎盖下进行任何优化,那就不知道了。

因为他们的mathf函数基本上包含了C#math函数,可能是因为它使用了浮点数而不是小数,这本身就是一种优化,但它们仍然是资源的两倍a ulong,可用于存储值,然后除以10的因子。

当进行每帧处理数百到数千个浮点数的物理计算时,我们似乎想要得到所有选择。

最好我被告知我想要使用指针,我会提供链接,但我不会在不安全的情况下出售。

http://answers.unity3d.com/questions/804103/how-to-enable-unsafe-and-use-pointers.html

2 个答案:

答案 0 :(得分:1)

字节(8位),短(16位),Int(32位),长(64位)和十进制(128位)准确,而Float(32位)和Double(64位) -bit)不是。浮点的优点是它们具有高范围,但它以精确度为代价。

您可以获得接近于零的高精度,而在更高的数字时则更少。我使用Unity为我自己的项目进行的测试表明,在某些情况下,我已经无法在16 000之后将我的1米网格中的东西定位,它将跳过1米。

大多数显卡及其API使用32位浮点数据类型。这是内存(和一些,但不是很多,处理能力)和精度之间的权衡。因此,Unity也使用float是有道理的。虽然一些商业卡已开始获得support for 16-bit and 64-bit floating points

Unity没有对浮动本身进行优化,它在大多数情况下都会在原始状态下将其交给GPU。这是最优化的方式。

Mathf中包装Math的选择可能是为了避免混淆(即方法签名)并允许它们正确地扩展Math类。

一个更大的缺点的例子:我的游戏有一个几乎无限的世界,因此必须有一个“Futurama Engine”。它会不时地将玩家调整到0,0,0和世界,以防止任何物体在浮动中处于太高/低位置。 “引擎根本不会移动船只。船只停留在原地,引擎会围绕它移动宇宙。”如果Unity和显卡使用十进制,则不需要。< / p>

答案 1 :(得分:0)

<强>注意:

  

浮点数为32位,双精度数为64位,小数位数为128位。因此,ulong的大小是float的两倍,大小与double的大小相同,是小数的一半。

-Scott Chamberlain