- Home /
Rotate a vector based on mouse x coordinates?
Ok, so I'm making a third person game in which I have a blend tree that takes in a parameter HorAimOffset, which is taken by taking the angle between my compass vector and an intended direction vector. The angle of this offset causes the player to rotate, thus closing the gap between the intended direction vector and the reference vector. I created the reference unit vector, and a called a function to find the angle between the two, but I'm not entirely sure how to create the look direction vector based on the rotation of the mouse in the x direction. Here's what I've got (note: yRotation refers to rotation about the y axis, not along it):
public class CharacterMovement : MonoBehaviour {
private Animator playerAnim;
public Vector3 refDir;
public Vector3 lookDir;
public int lookSens = 2;
public float yRotation;
public float offsetAngle;
void Start () {
playerAnim = GetComponent<Animator>();
}
void Update () {
yRotation += Input.GetAxis("Mouse X") * lookSens;
lookDir = new Vector3(yRotation, 0, 0);
refDir = new Vector3 (0, 0, 1);
offsetAngle = Vector3.Angle(refDir, lookDir);
playerAnim.SetFloat("HorAimAngle", offsetAngle);
}
}
obviously the statements in update to set the look direction vector and the y rotation are incorrect, but it's just something I came up with as a placeholder for now, until I can figure out what's actually going to work. Also, I made the properties mostly public for now just so I can easily observe them in the inspector while it runs. Working with vectors is kind of hard for me to visualize/wrap my head around, so thanks in advance
Answer by dkjunior · Oct 10, 2015 at 06:36 AM
You can use Quaternion to rotate your lookDir vector around Y axis, like this:
public class CharacterMovement : MonoBehaviour {
private Animator playerAnim;
public Vector3 refDir;
public Vector3 lookDir = new Vector3(0.0f, 0.0f, 1.0f);
public int lookSens = 2;
public float yRotation;
public float offsetAngle;
void Start () {
playerAnim = GetComponent<Animator>();
}
void Update () {
float mouseX = Input.GetAxis("Mouse X") * Time.deltaTime;
lookDir = Quaternion.Euler(0.0f, mouseX, 0.0f) * lookDir;
refDir = new Vector3 (0, 0, 1);
offsetAngle = Vector3.Angle(refDir, lookDir);
playerAnim.SetFloat("HorAimAngle", offsetAngle);
}
}
Your answer
Follow this Question
Related Questions
Flip over an object (smooth transition) 3 Answers
How to move camera up and down 1 Answer
Bullet flies away for no apparent reason. 1 Answer
Setting value of transform.rotation in code, C# 2 Answers
Problem with C# "if" statement? 2 Answers