gpt4 book ai didi

c# - Vector3是怎么实现的,为什么属性是只读的?

转载 作者:行者123 更新时间:2023-11-30 14:12:05 26 4
gpt4 key购买 nike

Vector3 v = new Vector3(1, 1, 1);
v.x = 5;

为什么我不能这样做?我必须做 v = new Vector3(5, v.y, v.z);

我认为这背后的原因是为了性能。但我猜不出为什么这是必要的。


编辑:

我撒谎了,这确实有效。我一直在使用 transform.positionVector3 总是返回其自身的副本,这就是为什么在其上设置值不起作用的原因。某种 Unity 魔法。

最佳答案

I lied, this actually does work. The Vector3 I've been working with transform.position always returns a copy of itself, which is why setting values on it doesn't work. Some kind of Unity magic.

实际上,原因是 Vector3 是结构体。在 C# 中,结构是 value types .所以它们总是由值 areas class can be pass/returned by references 返回.对于包装结构成员的所有属性(如 Rect、Vector2 等...),这将是相同的行为

因为这是一个属性,所以当您调用 get 方法时,它会返回结构位置的副本值。您将始终需要将其分配给本地 ref,修改它然后重新分配它:

Vector3 t_Pos = transform.position;
t_Pos.Normalize();
transform.position = t_Pos;

关于c# - Vector3是怎么实现的,为什么属性是只读的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18732930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com