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)