if(Quaternion.Angle(reference.rotation,transform.rotation) > 0){

Vector3 axis = Vector3.Cross(transform.forward,reference.forward);

Quaternion delta = Quaternion.AngleAxis(Quaternion.Angle(transform.rotation,reference.rotation),axis.normalized);

rigidbody.angularVelocity = Vector3.zero;

if(axis.y < 0){

delta.eulerAngles.Scale(new Vector3(0,-1,0));

rigidbody.AddTorque(delta.eulerAngles * Mathf.PI * 6/180,ForceMode.VelocityChange);

}else{

rigidbody.AddTorque(delta.eulerAngles * Mathf.PI * 6/180,ForceMode.VelocityChange);

}

}else{

rigidbody.angularVelocity = Vector3.zero;

}

}

This is the code I write in FixedUpdate. Reference is the Object I want to follow. When I rotate clockwise, it works. But when I rotate conter-clockwise, it wrong. It rotate in the wrong direction and wrong speed. How can I do?

Looking at your code, here are a few things to consider:

- Doing what you are doing, the chance of getting no angle between the reference and the object is very small.
- Unity creates euler angles from the Quaternion. There are multiple euler angle representations for any given physical representation, and the one Unity reports may not be what you expect.
- AddTorque() is like AddForce(). Adding new torque does not cancel out old torque unless your drag is set very high.
- You can assign directly to â€˜Rigidbody.angularVelocityâ€™. The components will be in Radians.
- You might take a look at Rigidbody.MoveRotation(). This is an untested suggestion.

Use following scripts:

```
public GameObject obj;
public float speed;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
rigidbody.AddForce(obj.transform.forward*-speed);
}
}
```