Unityで transform.localPosition.x = 1.0f; ができないわけ

C#初心者の私がUnityで最初戸惑ったのはtransform.localPosition.x = 1.0f;というようなことができないことです。

これをやろうとすると、

error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.localPosition'. Consider storing the value in a temporary variable

というエラーが出ます。UnityEngine.Transform.localPositionは変更できないよって言われてます。

なんで、こんなことになるかというと、localPositionがプロパティだからです。

Transformの定義を見ると、

public Vector3 localPosition { get; set; }

というようになっています。なので、localPositionにはVector3を直接与えることしかできないのです。

これが、プロパティでなく、

public Vector3 localPosition;

という形であれば、transform.localPosition.x = 1.0f;という風に書くことができますが、そうはなっていないのです。


C++で考えると、プロパティは以下のような関数があるようなものです。

const Vector3& GetLocalPosition() { return localPosition; }
void SetLocalPosition( const Vector3& pos ) { localPosition = pos; }

そう考えると、Vector3で渡さないといけないのが理解しやすいんじゃないかと思います。