- Home /

# How do I rotate on World Axes with Quaternion.Slerp?

When I rotate my object using this script...

```
function RotateObject (thisTransform : Transform, degrees : Vector3, seconds : float) {
if (rotatingNew) return;
rotatingNew = true;
```

```
```

```
var startRotation = thisTransform.rotation;
var endRotation = thisTransform.rotation * Quaternion.Euler(degrees);
var t = 0.0;
var rate = 1.0/seconds;
while (t < 1.0) {
t += Time.deltaTime * rate;
thisTransform.rotation = Quaternion.Slerp(startRotation, endRotation, t);
yield;
}
rotatingNew = false;
```

}

...the object rotates on it's local axes instead of the world axes.

What is a fairly simple way to get this to rotate on World Axes?

Thanks in Advance =)

**Answer** by Jesse Anders
·
Jan 09, 2011 at 04:05 AM

Try changing this:

```
var endRotation = thisTransform.rotation * Quaternion.Euler(degrees);
```

To this:

```
var endRotation = Quaternion.Euler(degrees) * thisTransform.rotation;
```

Thank You! This was much simpler than I thought it would be.

Could you explain what is the difference between these 2 orders?

**Answer** by Kalu
·
Nov 19, 2011 at 05:44 PM

After lots of testing, the pins remain in place, but following the combination of rotation is complete, the cube undergoes some rotation along the Y axis that is manipulating the "wheel" of rotation Z or Y. And I can not understand where the problem. Here is the code used ..

```
void Update () {
if(switchControl == true && curTarget != null){
if(curTarget.name == "RedR" || curTarget.name == "GreenR" || curTarget.name == "BlueR"){
Quaternion curPlanchTargetRot = Quaternion.Euler(angles);
curPlanche.transform.rotation = Quaternion.Slerp(curPlanche.transform.rotation, curPlanchTargetRot, 10f*Time.deltaTime);
}
}
void onMouseRotateDrag ()
{
float posInitX = initMousePosX;//position du curseur au moment du clic
float posInitY = initMousePosY;
float posCurX = Input.mousePosition.x;//position du curseur pendant le drag
float posCurY = Input.mousePosition.y;
differenceX = Mathf.Floor((posCurX-posInitX)/150);
differenceY = Mathf.Floor((posCurY-posInitY)/150);
curDifference = differenceX;
if(Mathf.Abs(curDifference)<Mathf.Abs(differenceY)){//floor() valeur inf et ceil() valeur sup
// curDifference = differenceY;
}
if(curDifference != curApplyDifference){
if(curTarget.name == "RedR"){ // axe X
angles.x = ((-curDifference*90) % 360);
curApplyDifference = curDifference;
}else if(curTarget.name == "GreenR"){ // axe Y
angles.y = ((-curDifference*90) % 360);
curApplyDifference = curDifference;
}else if(curTarget.name == "BlueR"){ // axe Z
angles.z = ((-curDifference*90) % 360);
curApplyDifference = curDifference;
}
posInitX = Input.mousePosition.x;
posInitY = Input.mousePosition.y;
}
}
```

I need some help ... It's been three days I'm looking without much success

if you need some help, you should add this as a question. and if you wanted to call attention from ppl in this " thread ", then you could post comments. but above all, try to make your question clear. I can't understand what you're asking.

### Your answer

### Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.