- Home /
Calculate vector3 from angle
I'm currently making a camera, but I'm having trouble finding out a ventor3 from an angle.
I want the camera to be able to rotate around my character. I'm using mouseX and mouseY axes as input. Now, if I have an angle, how do I calculate the vector3 if it has to be x units away from the character.
Answer by Peter G · Jul 02, 2011 at 03:39 PM
You can do the trig if you want to (its really easy), but Unity has a bult in operator to do the math for you.
 var distFromObj : float;
 
 function SetVectorFromAngle (x : float, y : float, z : float) : Vector3 {
      var rotation = Quaternion.Euler(x, y, z);
      var forward = Vector3.forward * distFromObj;
      return forward * rotation;
 }
multiplying a quaternion by a vector rotates the vector by the quaternion. So for example:
 var rotation = Quaternion.AngleAxis(90, Vector3.up);
 var forward = Vector3.forward;
 var right = forward * rotation;
A slight correction to your code: the Quaternion should come first in the multiplication. It throws an error if you try to put the Vector3 first. That little difference got me for a bit.
Thanks, i was wondering why i couldn't multiply a vector3 and a quaternion :)
Hi sir, thanks for your reply to this question, it's helped me a lot. This must be a noob question but could you please explain for me why multiply a vector with a quaternion can get the direction of the other vector? I try to explain it myself but I have no idea. :( Thanks and regard Vince
Answer by Bunny83 · Jul 02, 2011 at 03:55 PM
Well, the most straight forward way that came to my mind is simple trigonometry.
 //C#
 float radHeading = heading*Mathf.Deg2Rad;
 float radPitch = pitch*Mathf.Deg2Rad;
 Vector3 relDirection = new Vector3(Mathf.Cos(radHeading),Mathf.Sin(radHeading),0);
 relDirection *= Mathf.Cos(radPitch);
 relDirection.z = Mathf.Sin(radPitch);
 // The camera position would be your target postion (the player's position) + relDirection*dist;
 // You might need to invert one of the angles to match your setup (invert an angle will reverse the direction).
 transform.position = target.position + relPosition * distance;
Another, more Unity like, way would be to place your camera into an empty GameObject and move the camera locally to (0,0,-distance). Now you can place the empty GO at the player position and just need to rotate it.
 transform.rotation = Quaternion.AngleAxis(pitch,Vector3.right) * Quaternion.AngleAxis(heading,Vector3.up)
Something like that ;)
Your answer
 
 
             Follow this Question
Related Questions
How do I get an Unity Camera to interact with an Android camera compas funtion 1 Answer
How to calculate direction between 2 objects 2 Answers
How to make camera position relative to a specific target. 1 Answer
Camera Zoom from rotation. 0 Answers
Why is my terrain dark in the distance? (It gets lighter when moving closer.) 4 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                