- Home /
Rotate object: script works if applied to that object, but not if referencing object in scene
Hello,
I want to rotate the hands of a clock every time the clock is clicked on.
However: although the script below works fine to translate the entire clock. When I replace this line:
transform.rotation= Quaternion.Lerp (transform.rotation, targetRotation , 10 * smooth * Time.deltaTime);
with this:
minuteHand.transform.rotation= Quaternion.Lerp (transform.rotation, targetRotation , 10 * smooth * Time.deltaTime);
The rotation no longer work properly, but starts jerking between 4 and 7 degrees and doesn't stop moving. Does anyone know how I should write the script so I can rotate a gameobject in the scene, rather than the object the script is applied to?
public class ClockScript : MonoBehaviour {
public GameObject minuteHand;
public GameObject hourHand;
public float clockAngle;
public float smooth = 1f;
private Quaternion targetRotation;
void Start(){
targetRotation = transform.rotation;
}
void Update () {
if (Input.GetMouseButtonDown(0)) {
targetRotation *= Quaternion.AngleAxis(clockAngle, Vector3.forward);
}
transform.rotation= Quaternion.Lerp (transform.rotation, targetRotation , 10 * smooth * Time.deltaTime);
}
}
All the best, Laurien
Also you should look into Slerp, it is a spherical quaternion lerp to help lerp the visual angels. However it IS a clock you are using, so realistically basic euler angels on a single axis should solve it right?
Thank you! I'll look into that - I probably won't need it just for the clock, but that'l come handy in the future!
Answer by voncarp · Feb 16, 2017 at 07:31 PM
It looks like you want to manipulate a specific transform. So specify the object you want to change.
From your posted code, maybe something like this :
minuteHand.transform.rotation= Quaternion.Lerp (minuteHand.transform.rotation, targetRotation , 10 * smooth * Time.deltaTime);
If you only write transform, it will use the transform of the script.
Thank you so much!! It's working now - I misunderstood what went inside the brackets :/
Your answer
Follow this Question
Related Questions
How can I smooth the rotation using quaternion and raycast? 1 Answer
Smoothly Rotate 2D sprite 90 degrees on click 2 Answers
Lerping Quaternions Results in NaN's 1 Answer
better way to rotate instead Coroutine 1 Answer
Use Lerp to rotate object 2 Answers