[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#めっちゃ親切だな。
教えてエライ人!