- Home /
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!
Answer by robertbu · Apr 29, 2014 at 07:57 PM
'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.
Your answer
Follow this Question
Related Questions
Is there a way to smoothly transition between two floats, with it slowing down towards the end 1 Answer
Copy rotation of targetObject to current object with an influence in the range from 0-1. 0 Answers
Rotate towards target doesn't work properly (Quaternion.lerp) 1 Answer
Use lerp or translate 1 Answer
How do I rotate an object smoothly? 1 Answer