# Convert a 360 bearing into a Vector 2

Hi there, I'm wondering how I can convert a bearing into a Vector2. I assume it should be fairly straight forward using Sin and Cos, but my maths isn't very good. The angle I would be passing into the functions works in the usual way a bearing works (i.e. clockwise starting from a 0 point at Vector2.up), and I need to get a Vector2 out with a magnitude of 1.

Any ideas?

Thanks

P.S. here's the code I have so far for it.

```
Vector2 GetCameraNorth ()
{
//Find the forward facing vector of the camera (relative to the camera position) if it were on a 2d plane
Vector2 CameraNorth = new Vector2 (Camera.main.transform.forward.x, Camera.main.transform.forward.z);
Vector2 Offset = CameraNorth - new Vector2(Camera.main.transform.position.x, Camera.main.transform.position.z);
return Offset.normalized;
}
Vector3 GetMoveDirection ()
{
//Get the player input as a 2d vector
Vector2 MovementInput = new Vector2 (Input.GetAxis ("Horizontal"), Input.GetAxis ("Vertical"));
Vector2 NormalizedMovementInput = MovementInput.normalized;
//With both the Camera vector and the Input movement vector, we can calculate our desired direction by adding together the angles of both, and making a new vector using those angles.
//To deal with the issue of angles in unity only being calculable between 0-180 (rather than 360) we have to do a little extra work to turn the angles into 360 degree bearings.
float camBearing;
float inputBearing;
float desiredDirectionBearing;
if (GetCameraNorth ().x < 0) {
camBearing = 360 - Vector2.Angle (Vector2.up, GetCameraNorth ());
} else {
camBearing = Vector2.Angle (Vector2.up, GetCameraNorth ());
}
if (NormalizedMovementInput.x < 0) {
inputBearing = 360 - Vector2.Angle (Vector2.up, NormalizedMovementInput);
} else {
inputBearing = Vector2.Angle (Vector2.up, NormalizedMovementInput);
}
desiredDirectionBearing = camBearing + inputBearing;
}
```

In the above code, I would then be plugging in the float variable 'desiredDirectionBearing' to generate a Vector2 using it.

The basic idea being:

Turn Vector 'Av' into Float Angle 'Af'

Turn Vector 'Bv' into Float Angle 'Bf'

Make sure that both 'Af' and 'Bf' are 0-360 bearings rather than a 0-180 angles.

'Af' + 'Bf' = 'Cf'

Turn Float Angle 'Cf' into Vector 'Cv' (this here being the step I dont know how to do).

**Answer** by elenzil
·
Oct 12, 2016 at 04:49 PM

```
Vector2 unitLengthVec = new Vector2(cos(angle), sin(angle) * vectorLength;
```

That assumes a real angle: radians and 0=east, CCW. Otherwise I think convert to radians and swap sin/cos to get a game angle. Also sin/cos need Mathf-dot.

I feel like a more Unity way of doing this might be Quaternion.Euler(0,angle,0)*Vector3.forward*len;

### 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.