The reason you can't directly alter the position vector

àì夳堔傛蜴生んèń 2022-08-06 14:13 106阅读 0赞

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.

发表评论

表情:
评论列表 (有 0 条评论,106人围观)

还没有评论,来说两句吧...

相关阅读