# Understanding Torque in Unity

This is (hopefully) a simple question that should avoid me asking a more complex question. This is in Unity (2D) but hopefully this is a general physics principle I am not getting.

I am applying a torque to a 2D object. The object has a scale of 1, a RigidBody2D with a mass of 1 and no angular drag or undergoing gravity. It is a CircleCollider2D with a radius of 1. There is nothing else attached to the object.

In the following code I apply a torque of Pi for one second. In linear motion (and from my understanding of torque) I would expect the angular velocity, after one second, to be Pi (or 180deg/s). However, running this code and printing out the speed at t=1.0, the speed is 90deg/s.

void FixedUpdate()
{
if (time < 1.0f)
{
rigidbody2D.AddTorque(Mathf.PI);
}
}


This is consistent, applying a torque of 2Pi gives me a velocity of 1Pi after the time. Where is this factor of 2 coming from?

• just a guess, maybe you have diameter of 1 and a radius of 0.5 ? Jan 8, 2014 at 18:00
• No radius is 1, unless of course Unity have mislabelled the property in the editor, which is entirely possible Jan 8, 2014 at 18:53
• Weirdly, changing the radius to 0.5 (i.e. the diameter becomes 1.0) the final speed is 4pi! Clearly I don't understand how the torque is being applied because in my head, a smaller object would have less leverage.... Jan 8, 2014 at 18:57

## 2 Answers

A torque is a force which will be applied on the tangent of the circle :

So for the same force applied the velocity of the point where the force is applied will be the same, knowing that : If the diameter change but the force stays constant, a smaller diameter means smaller perimeter so less way to travel to make an angular degree so the angular speed in degrees per seconds will be faster with a small diameter than with a large diameter for exactly the same force applied!

More math frenzy definition at wikipedia

I can answer part of this old question, but not all of it because not enough information is given such as what properties are being used to measure the velocity and how it is being converted to Pi as a unit. For example, Rigidbody2D.angularVelocity is given in degrees per second and I can only assume that is being converted to radians, but that conversion is not shown. Show us more of the code and raw output.

Aside from that, torque is torque. It doesn't matter "how" it is being applied as long as it is applied at the expected value. Assuming the default units of kg, m, and s, a torque of Pi N-m could come from Pi kg at radius 1 m, or 1 kg at radius Pi m (both assuming perpendicular force), or any other set of factors that equates to Pi N-m of torque. If it does matter how the torque is applied then use a different method to apply it such as Rigidbody2D.AddForce(), Rigidbody2D.AddForceAtPosition() or Rigidbody2D.AddRelativeForce().

It makes sense that a smaller cylinder accelerates faster than a larger cylinder of the same mass, given the same torque (assuming, that is, you left them at the same mass). The larger cylinder would be less dense overall with more mass further away from center. A merry-go-round with children hanging on the outside edge is harder to accelerate than with the same children huddled near the center.

The problem I see here, however, is that you show an increase in rotational velocity of 16x (or 4x^2) when it should have been only 4x for half the radius:

• angular acceleration = Torque / (0.5 * mass * radius^2)

• 1.0r cyl = Pi / (0.5 * 1 * 1.0^2) = 2Pi radians/s^2
• 0.5r cyl = Pi / (0.5 * 1 * 0.5^2) = 8Pi radians/s^2
• angular velocity = angular acceleration * time

• 1.0r cyl = 2Pi radians/s^2 * 1s = 2Pi radians/s = 360 deg/s
• 0.5r cyl = 8Pi radians/s^2 * 1s = 8Pi radians/s = 1440 deg/s

But it is not possible to guess where the fault lies (the engine or your code) without more information.