在Unity中不能对transform.position.x/y/z直接赋值的原因探究

很多人在学习Unity过程中,都遇到过对transform.position.x/y/z直接赋值时报错的情况。


只能用一个Vector3对postion进行整体的赋值


至于为什么会无法赋值,有一种很常见的说法:


看起来好像很有道理,但是——


异议あり!!!

真的是这样吗?

让我们使用F12导航到transform里,可以看到position是Vector3类型


而Vector3里的x/y/z并没有访问限制


那么究竟是为什么无法对transform.position.x/y/z赋值呢?

原因就在于Vector3是一个结构体,而position是一个自动实现的属性。

在C#里,结构体是值类型的,值类型在通过方法传递的时候,所传递的只是值的副本

C#的属性可以说是两个分别名为get和set的方法

而当我们写出形如 transform.position.x = 1 这样的代码时,是在通过get方法得到position,然后修改position的x字段的值。

但是,由于position是结构体类型的,get得到的也只是position的一个副本,而对这个副本所作出的任何修改,都对原positon没有任何影响,因此这样的修改是毫无意义的。编译器会禁止这样的修改操作,也就是可以理解的了。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值