使用标准构造函数仅获取分配给 Vector3 的数字的绝对值
Getting only the absolute value of numbers on assignment to Vector3 with a standard constructor
我试图在 class 的开头使用其默认构造函数初始化一个 public 变量,一个 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 函数应用于所有值。
出于绝望,我尝试同时使用“-”和“-”符号。显然,后一个 (" – ") 只是抛出一个错误,因为它是一个无法识别的标记,但适当的前一个 (" - ") 只是被忽略了,就像它根本不存在或者好像我已经将它注释掉了一样。 Indeed, look at this picture of the code in the actual IDE and see how it is colored. 请注意,IDE 将可识别的数值变为橙色,包括限定字符,如小数点和 "f" 表示末尾的浮点值……但“-”符号这里没有像往常一样变成橙色。就好像 IDE 根本没有将“-”识别为数字的一部分。 (是的,我知道,IDE 中的颜色编码与编译器本身是分开的,并且彼此完全独立,两者在识别标记和值等方面实际上可能具有完全不同的行为,但两者似乎对我这里的“-10.0f”的解释与“10.0f”的解释相同。)
我是不是在做一些愚蠢的事情,我需要添加更多的语法或限定符才能将其识别为负数? ... 或者我实际上 运行 进入了 IDE and/or 编译器的错误? "Why not just change assignment at runtime then? you already said this works!" 好吧,这就是我目前正在做的事情,但我是一个挑剔的学究,具有类似强迫症的特质,鉴于这项任务应该有效,这让我发疯,因为我无法得到适当的任务负数这样。
有什么想法可以帮助吗?
您是否尝试过 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);
}
我试图在 class 的开头使用其默认构造函数初始化一个 public 变量,一个 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 函数应用于所有值。
出于绝望,我尝试同时使用“-”和“-”符号。显然,后一个 (" – ") 只是抛出一个错误,因为它是一个无法识别的标记,但适当的前一个 (" - ") 只是被忽略了,就像它根本不存在或者好像我已经将它注释掉了一样。 Indeed, look at this picture of the code in the actual IDE and see how it is colored. 请注意,IDE 将可识别的数值变为橙色,包括限定字符,如小数点和 "f" 表示末尾的浮点值……但“-”符号这里没有像往常一样变成橙色。就好像 IDE 根本没有将“-”识别为数字的一部分。 (是的,我知道,IDE 中的颜色编码与编译器本身是分开的,并且彼此完全独立,两者在识别标记和值等方面实际上可能具有完全不同的行为,但两者似乎对我这里的“-10.0f”的解释与“10.0f”的解释相同。)
我是不是在做一些愚蠢的事情,我需要添加更多的语法或限定符才能将其识别为负数? ... 或者我实际上 运行 进入了 IDE and/or 编译器的错误? "Why not just change assignment at runtime then? you already said this works!" 好吧,这就是我目前正在做的事情,但我是一个挑剔的学究,具有类似强迫症的特质,鉴于这项任务应该有效,这让我发疯,因为我无法得到适当的任务负数这样。
有什么想法可以帮助吗?
您是否尝试过 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);
}