使用标准构造函数向Vector3赋值时仅获取数字的绝对值

本文关键字:获取 数字 绝对值 赋值 标准 构造函数 Vector3 | 更新日期: 2023-09-27 18:26:23

我试图在类的开头使用默认构造函数初始化一个公共变量Vector3。代码行本身看起来是这样的:

public Vector3 DefaultOffset = new Vector3(0.0f, 2.0f, -10.0f);

现在一切都好起来了。。。但它忽略了最后一个数字上的负号,而是将变量"DefaultOffset"初始化为代码没有负号,即:

public Vector3 DefaultOffset = new Vector3(0.0f, 2.0f, 10.0f);

我检查了一下,现在代码中没有任何采用绝对值的内容。在我的所有代码中,DefaultOffset从未在任何地方分配过另一个值,它甚至可以被设置为受保护的常量(目前,稍后它的值可能会在运行时更改,但不存在这样的代码)。

在初始化DefaultOffset之后,我可以在运行时将值-10.0f分配给它的"z"值,这样就可以保持并正常工作。玩打印变量值的游戏,在这个赋值中,"-"似乎在赋值过程中被完全忽略了,它的类似赋值将ABS函数应用于所有值。

出于绝望,我尝试同时使用"-"answers"-"符号。显然,后一个符号("-")只是抛出了一个错误,因为它是一个无法识别的令牌,但适当的前一个符号"-"只是被忽略了,就像它根本不存在,或者好像我已经注释掉了一样。实际上,看看实际IDE中的代码图片,看看它是如何着色的。请注意,IDE会将已识别的数值变成橙色,其中包括限定字符,如小数点和末尾注明浮点值的"f"。。。但这里的"-"标志并没有像往常一样变成橙色。就好像IDE根本没有将"-"识别为数字的一部分。(是的,我知道,IDE中的颜色编码与编译器本身是分开的,并且彼此完全独立——两者在识别标记和值等方面可能有完全不同的行为,但两者似乎对我的"-10.0f"answers"10.0f"有着相同的解释。)

我是不是在做一些愚蠢的事情,我需要添加更多的语法或限定符才能将其识别为负数。。。或者我真的在IDE和/或编译器中遇到错误了吗?"那为什么不在运行时更改分配呢?你已经说过这很有效了!"这就是我目前正在做的事情,但我是一个挑剔的学究,有强迫症般的品质,考虑到这个分配应该有效,我无法以这种方式正确分配负数,这让我发疯。

有什么想法可以帮助吗?

使用标准构造函数向Vector3赋值时仅获取数字的绝对值

您尝试过执行0.0f - 10.0f而不是仅执行-10.0f吗?如果你把它分解,那就是你真正要求C#编译器做的。

public变量在Unity中有这样的趋势。一旦你在检查器中将其设置为某个值,在代码中将其更改为什么并不重要,它会从你第一次设置它时起就取原来的值。因此,基本上,你必须在检查器中更改它,或者将其设为protected,然后再更改,然后再次设为public

编辑:或者你可以把它变成一个字段:

public Vector3 DefaultOffset
{
    get { return new Vector3(0.0f, 2.0f, -10.0f); }
}

或者,如果您在Awake() 之后设置值,它甚至应该工作

public Vector3 DefaultOffset;
void Awake()    // Or Start or OnEnable or Update or FixedUpdate.....
{
    DefaultOffset = new Vector3(0.0f, 2.0f, -10.0f);
}