- Home /
Equivalent of "Degree to Vector2" in Unity
I'm using these math helper functions currently:
public static class MathHelpers
{
public static Vector2 RadianToVector2(float radian)
{
return new Vector2(Mathf.Cos(radian), Mathf.Sin(radian));
}
public static Vector2 RadianToVector2(float radian, float length)
{
return RadianToVector2(radian) * length;
}
public static Vector2 DegreeToVector2(float degree)
{
return RadianToVector2(degree * Mathf.Deg2Rad);
}
public static Vector2 DegreeToVector2(float degree, float length)
{
return RadianToVector2(degree * Mathf.Deg2Rad) * length;
}
}
in my scripts.
Example:
public class MoveScript : MonoBehaviour
{
public float Angle = 90f;
public float Speed = 5f;
private void Update()
{
Vector3 velocity = MathHelpers.DegreeToVector2(Angle, Speed);
transform.position += velocity * Time.deltaTime;
}
}
But I bet there is built in way in Unity to accomplish this without requiring to use my MathHelpers class which I was using in XNA. But after searching for hours still can't find method which can convert degree to Vector2 or Vector3 in Unity.
So how can I convert degree to Vector2/Vector3 to be able to use it as velocity?
Answer by Bunny83 · Nov 03, 2014 at 02:34 PM
Well, if you want to only use methods available in Unity you can use something ugly like this:
Vector2 dir = (Vector2)(Quaternion.Euler(0,0,degree) * Vector2.right);
Even it's quite short, i would recommend to use similar helpers you used in XNA since a quaternion rotation would expand the quaternion to a 3x3 rotation matrix. This is better for performance:
public static Vector2 RadianToVector2(float radian)
{
return new Vector2(Mathf.Cos(radian), Mathf.Sin(radian));
}
public static Vector2 DegreeToVector2(float degree)
{
return RadianToVector2(degree * Mathf.Deg2Rad);
}
Answer by robertbu · Nov 03, 2014 at 02:29 PM
A typical Unity way would be to use Vectors:
Vector3 dir = Quaternion.AngleAxis(angle, Vector3.forward) * Vector3.right;
And you can cast the result to get a Vector2 if you want.
But for purely 2D calculations, your code may be faster. Note there is a Mathf.Deg2Rad, so for degrees you can do this without the extra function call:
return new Vector2(Mathf.Cos(degree * Mathf.Degree2Rad), Mathf.Sin(degree * Mathf.Degree2Rad));
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Illuminating a 3D object's edges OnMouseOver (script in c#)? 1 Answer
Flip over an object (smooth transition) 3 Answers