- Home /
Rotate Character after a certain angle
I am working on a top-down game. I have a look at script which is basically supposed to turn the character based on a crosshair but I want the character to turn only after a certain angle as in the character should turn let's say 90 degrees to the right if the LookAtAngle goes beyond 45 degrees. LookAtAngle = Quaternion.FromToRotation(transform.forward, mLookAtDirection);
Answer by Ymrasu · Feb 24, 2019 at 02:14 PM
I've commented to this code to help explain what is going on, I hope it helps:
float zoneSize = 90f; // every 90 degrees we turn
float rotSpeed = 180f; // 180 degrees a second
void Update()
{
// find angle (angle 0 points right and continues counter-clockwise)
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float angle = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
// adjust angle so we can measure easier
// instead of trying -45 to 45, it is 0 to 90
angle += zoneSize / 2f;
// make sure angle is between 0 and 360
if (angle < 0) { angle += 360; }
// take the angle and clamp it to zoneSize increaments
angle = Mathf.FloorToInt(angle / zoneSize) * zoneSize;
// set up a taret rotation
Quaternion targetRotation = Quaternion.Euler(0f, 0f, angle);
// then lerp to target
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotSpeed * Time.deltaTime);
}
This would be a script on your character, and assume your character at rotation 0 is facing right.
Your answer
Follow this Question
Related Questions
Rotating a character 4 Answers
How to align the transform.rotation.y with the world space vector y? 1 Answer
Quaternion.Lerp shaky while in coroutine? 1 Answer
Parent Rotation to Get Target Child Rotation 2 Answers
How to use quaternions to apply an offset to a rotation to calibrate a controller 1 Answer