[Unity]C#でpositionのxとかyに値を突っ込む
たしかにtransform.position.xとかを直接変更できなくてめんどうだなーと思ってた。
Vector3のx,y,zはreadonlyなプロパティなんだろうなーとか勝手に思い込んでた。
でもさきほどのサイトにはこう書けるって書いてあって…
Vector3 pos = transform.position; pos.y = 2; transform.position = pos;
( Д ) ゜ ゜
え、なんで一旦変数に取り出すだけでアクセスできるようになるの。
UnityEngine.Vector3型はstructで定義されてたから
structのメンバにプロパティ経由でアクセスできないのか?
と思って試してみた。
public class MyScript { /// <summary> /// コンストラクタ /// </summary> public MyScript() { //初期化 this.myClassMember = new MyClass(); this.myClassProperty = new MyClass(); this.myStructMember = new MyStruct(); this.myStructProperty = new MyStruct(); //メンバへセット this.myClassMember.X = 1;//OK this.myClassProperty.X = 1;//OK this.myStructMember.X = 1;//OK this.myStructProperty.X = 1;//Error } //メンバ変数として定義 private MyClass myClassMember; private MyStruct myStructMember; //プロパティとして定義 private MyClass myClassProperty{get;set;} private MyStruct myStructProperty{get;set;} /// <summary> /// テスト用クラス /// </summary> private class MyClass { public int X {get;set;} } /// <summary> /// テスト用構造体 /// </summary> private struct MyStruct { public int X {get;set;} } }
案の定this.myStructProperty.Xを書き換えようとしたらコンパイラエラーした。
this.myStructProperty.Xってした時点で既に構造体がコピーされてるってことか。
代入してもそのコピーされた構造体はすぐ消えちゃうからエラーにしてると。
構造体全然使わないから気づかなかった。
これで解釈あってるかな?
合ってるとしたらC#めっちゃ親切だな。
教えてエライ人!