Rotating one axis using Mathf.Lerp

public float currentRotation;
public float correctRotation = 0.0f;
public float smoothness = 5.0f;

		//---RESET ROTATION---//
	if (Input.GetKey ("g")) {
		currentRotation = rigidbody.rotation.z;
		rigidbody.rotation.z = Mathf.Lerp (currentRotation, correctRotation, Time.deltaTime * smoothness);
	}

The problem being that using rigidbody.rotation.z gives:

“Cannot modify a value type return value of UnityEngine.Rigidbody.rotation. Consider storing the value in a temporary variable.”

How do I go about doing this? I only want to rotate one axis, and I do not want to use transform.rotate. If I use rigidbody.rotation (without .z) it wants Quaternion values, which doesn’t work with Mathf.Lerp, which expects floats. I’m at a loss!

‘rigidbody.rotation’ is a Quaternion. It’s independent axes are not angles, and have value between -1 and 1. It recommended that you not use these axes unless you have a firm understanding of Quaternions. You can use eulerAngles, but you may not get the behavior you expect. To fix your error, you need to assign a Vector3 to transform.eulerAngles. So you pull eulerAngles out into Vector3 variable, make the modifications, then put it back. First make this change at the top of the file.

public Vector3 currentRotation

Then your code becomes:

 currentRotation = transform.eulerAngles;
 currendRotation.z = Mathf.Lerp (currentRotation.z, correctRotation, Time.deltaTime * smoothness);
 transform.eulerAngles = currentRotation;

Note that ‘currentRotation’ should be ‘private’. And if you don’t use it elsewhere in the class, it would be even better to declare it inside the method rather than at the class level.