# Why you can't simply transform.position.x = somefloat or transform.rotation.eulerAngles = somevec3?

Instead you need to do BS like that:

``````//oh for fuck's sake! For a moment I've thought Unity is a normal engine where such shuffling
//isn't needed. But no, you can't simply do transform.rotation.eulerAngles = someVec3;, you have do this BS.
Quaternion quat = rt.rotation;
quat.eulerAngles = normalRot;
rt.rotation = quat;
``````

or this:

``````Vector3 currentpos = this.transform.localPosition;
float newy = defaulty + (Mathf.Sin((Time.timeSinceLevelLoad * Mathf.Abs(shipSpeed))) * Mathf.Abs(sinAmp));
currentpos.y = newy;
currentpos.x += shipSpeed;
this.transform.localPosition.localPosition = currentpos;
``````

Because transform.position and transform.rotation are properties, not fields. They return the copy of position and rotation, not the references to the actual position and rotation.

I would suggest you to get deeper into C# to understand the difference. And read about how Unity works to understand why it’s implemented this way. (long story short, if I understand it correctly, position and rotation are stored in a core C++ part of Unity for performance purposes, so you get access to them from C# via properties)