Rotate 2D ignoring certain angle
Hello
Very quick question. I have this object which scans around it to find a target, it have a certain field of view and only targets the object when it's inside the view angle. The problem is when the view angle is lower than 180° and the object is rotated far enough to one side, then it will peek the target on the other side and taking the shortest route through the area outside the field of view, which not only looks stupid but shouldn't happen.
Like the image below, #1 is what happens and #2 is what I wish for it to happen. So it ignores the part of the field of view it can't actually see, and rotates the full way around.
I have tried a few things, but haven't come up with a solution, so I hope someone in here can help me. Here is a snapout of the code I use for rotation.
Vector2 difference = target - (Vector2)transform.position;
difference.Normalize();
float rotation = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
Quaternion euler = Quaternion.Euler(0, 0, rotation - 90);
turret.rotation = Quaternion.RotateTowards(turret.rotation, euler, rotationSpeed * Time.deltaTime);
To check whether the object is inside the view angle or not I simply that the angle between the objects like this.
public float AngleToTarget(Vector2 up, Vector2 target)
{
Vector2 difference = target - ((Vector2)transform.position + up);
difference.Normalize();
float angle = Vector2.Angle(up, difference);
return angle;
}
Which does work and all, I just want it to rotate a specific direction, depending where the target is.
Regards.
Your answer
Follow this Question
Related Questions
2D topdown projectiles movement 0 Answers
2D Knockback problem 2 Answers
Weird infinite loop-or just long loading time 2 Answers
2D TopDown rotating a gun according to its parent position, ON MOBILE, not PC, 0 Answers
Turnbased topdown 2D mouse movement 0 Answers