- 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