LoginSignup
1
2

More than 5 years have passed since last update.

なぜtransform.position.xが直接編集できないか

Posted at

https://teratail.com/questions/53956
この記事が一番まとまってると感じました。

まず大前提として、
transform.positionが、vector3型で実装されていて、vector3型はオブジェクトでなく構造体であり、
構造体は値型である、というのがあります。

詳細のコードは明らかにされてはいないのですが、
transform classの中で、positionはフィールド(すなわちメンバ変数として)に定義されているわけではなく、プロパティとして実装されている。(と挙動から推測できる)

public vector3 position { get; set; }

===

そしてそれが何を引き起こすかというと、

go.transform.position.x = 10;
は、
go.transform.position().xというようにコンパイラーに解釈され、
この場合、構造体、つまり値型の特徴から、
Vector3 anotherVec = go.transform.position;
anotherVec.x = 1;
ということをしようとしてしまいます。

これは全く関係ないVector3を生み出し、そこに値を代入し、それをほったらかしにするという、
空虚極まりない行為なので、それはC#側でエラーにしようよということで、エラーを出す仕様になったとさ。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2