下面的代码部分让我有点疯狂
public static readonly float f = 1.25f;
public static void init(){
Debug.Log(f); // output: 1.25f
FLIPPER_CENTERS = new float[,] {
{ (20*f), (27*f) }, { FLIPPER_WIDTH - (20*f), (27*f)},
{ (6*f), (25*f) }, { MH_FLIPPER_WIDTH- (6*f), (25*f) },
{ (8), (15)}, { (SMALL_FLIPPER_WIDTH - 8), (15)},
{ (8), (20)}, { (67 - 8), (20)},
};
Debug.Log(FLIPPER_CENTERS[0,0]); // output: 0, expected 25;
}
如果我打印该数组的第一个元素的值,我会得到[0, 0]
. [59, 20]
正如预期的那样,最后两个元素是。
第一个值应该是[25, 33,75]
。如果我代替(20*f)
.(20*1.25f)
{ (20*1.25f), (27*1.25f) }, { FLIPPER_WIDTH - (20*f), (27*f)},
所以这是问题所在:如果我在数组初始化中保留 f 的乘法,则值为 0。但是,如果我更改f
为1.25f
all 是好的。
我试图弄清楚发生了什么,但无济于事。我确定f
is1.25f
和 not的值0
。任何人都可以为我解释一下吗?
编辑:
为了证明f
不是0
,我尝试20/f
了第一个元素。那没有抛出异常,输出仍然是0
.
部分解决方案
f
从更改readonly
为const
解决问题。但是,我真的很想知道为什么会这样。
public const float f = 1.25f;
这一切都在 Unity 中运行,可能与它有关。