- Home /
Help rotating gun towards mouse position (with flipping)
Hi,
I have been working on a 2d platformer for quite a while now and am looking at trying to add in weapons and shooting. Currently I have it setup so that the player model flips if they are moving left or right, and now I am trying to add in a weapon. I am trying to make it so that the gun will rotate towards where the mouse cursor is, but if the player is looking left and the gun is looking right, the gun will flip, instead of rotating over 180 degrees and looking weird.
Here is my code so far for the gun:
public Vector3 mousePos;
public Vector3 gunPos;
public float angle;
// Update is called once per frame
void Update () {
mousePos = Input.mousePosition;
gunPos = Camera.main.WorldToScreenPoint(transform.position);
mousePos.x = mousePos.x - gunPos.x;
mousePos.y = mousePos.y - gunPos.y;
angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}
However, with this code, the gun doesn't rotate properly if my mouse cursor moves to the side of the screen that the player is not looking at.!
When the mouse cursor is to the right of the player and the player is looking right.
When the mouse cursor is to the left of the player and the player is looking right.
Answer by GamerC4 · Apr 14, 2016 at 12:11 AM
Try this
void Update ()
{
if (transform.localScale.x == 1)
{
Vector3 mousePos = Input.mousePosition;
mousePos.z = 5.23f;
Vector3 gunPos = Camera.main.WorldToScreenPoint(transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}
else if (transform.localScale.x == -1)
{
Vector3 mousePos = Input.mousePosition;
mousePos.z = 5.23f;
Vector3 gunPos = Camera.main.WorldToScreenPoint(transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, -angle));
}
}
`
Your answer
Follow this Question
Related Questions
bullet shot from Y axis while sprite 2D rotates on z axis 1 Answer
Rotate around, but track the mouse 1 Answer
2D Security Camera detection 0 Answers
Shooting with variable vector3 0 Answers
Shooting mechanics in 2.5D game 0 Answers