为什么不能直接更改transform.position.x的值
1个回答
展开全部
这个问题我搞错了,这里修正一下。这是c#中的结构体当作返回值的问题,结构体是值类型,而值传递是复制传递,所以返回的值不是原来的值了,对此返回值的修改是无效的,所以编译器就从源头上禁止了这样的操作。
unity论坛上有这个问题的讨论
The reason you can't directly alter the position vector is because it's actually a copy, not the actual position stored on the transform.
transform.position <--- returns a copy of the position
transform.position.x <--- the "x" value of the copy
transform.position.x = 7.0f <--- sets the "x" value on the copy
C# throws an error because you're setting the "x" value on a copy, which is then destroyed. It's a pointless line that if the compiler didn't pick up on it, could cause a tonne of hair pulling.
UnityScript gets around this when it compiles by converting your code and firing the C# setter:
transform.position.x = 7.0f
when compiled in UnityScript, translates (more or less) to:
var tempVector : Vector3 = transform.position;
tempVector.x = 7.0f;
transform.position = tempVector;
You can infer that because if you replicate this with a custom C# class, you can track as the getters/setters are invoked.
unity论坛上有这个问题的讨论
The reason you can't directly alter the position vector is because it's actually a copy, not the actual position stored on the transform.
transform.position <--- returns a copy of the position
transform.position.x <--- the "x" value of the copy
transform.position.x = 7.0f <--- sets the "x" value on the copy
C# throws an error because you're setting the "x" value on a copy, which is then destroyed. It's a pointless line that if the compiler didn't pick up on it, could cause a tonne of hair pulling.
UnityScript gets around this when it compiles by converting your code and firing the C# setter:
transform.position.x = 7.0f
when compiled in UnityScript, translates (more or less) to:
var tempVector : Vector3 = transform.position;
tempVector.x = 7.0f;
transform.position = tempVector;
You can infer that because if you replicate this with a custom C# class, you can track as the getters/setters are invoked.
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询