shenhuan111 2014-12-20 13:28 采纳率: 64.3%
浏览 6232
已采纳

unity c#中为什么不能直接更改transform.position.x的值?

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.

权威资料是这样解释的。这个如何解释,transform.position(position是Vector3类型的),transform是类。vector3是结构体的,vector3创建的可以直接修改x值,为什么这个position.x就不可以,实在不明白了?

  • 写回答

2条回答 默认 最新

  • shenhuan111 2014-12-20 15:43
    关注

    找到方法了,不是开放那边的定的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示