How can I limit the rotation of an object temporarily?
Hi,
I'm making a first person game, and I am using the arrow keys to control the camera for now, and if I press multiple keys at the same time, it becomes very disorienting, and hard to get back to where you were looking. So what I need to do is limit certain rotations while the key is pressed, so the player can't spin the camera out of control. How do I go about doing this?
Thanks in advance.
public Rigidbody rb;
public float speed;
public GameObject player;
public Quaternion currentRotation;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
//Define Axes
float forward = Input.GetAxis ("forward");
float strafe = Input.GetAxis ("strafe");
//The Vector 3 for movement
Vector3 Movement = new Vector3 (strafe, 0.0f, forward);
currentRotation = new Quaternion ();
currentRotation.Set (transform.rotation.x, transform.rotation.y, transform.rotation.z, 0.0f);
Debug.Log (currentRotation);
//Adding the force to move
rb.AddForce (Movement * speed);
#region
//Input from arrow keys, and rotations of the player
if (Input.GetKey ("right"))
{
rb.transform.Rotate(Vector3.up);
}
if (Input.GetKey ("left"))
{
rb.transform.Rotate(Vector3.down);
}
if (Input.GetKey ("up"))
{
rb.transform.Rotate(Vector3.right);
}
if (Input.GetKey ("down"))
{
rb.transform.Rotate(Vector3.left);
}
#endregion
}
} `
Answer by tormentoarmagedoom · Sep 17, 2018 at 11:44 AM
Good day.
As you are using Rotate, and not seting the rotation itself, its little more difficult. (because if you where change the rotation "manually" you only need to CLAMP it.) But, in your case, maybe the best is at the end of Update method, create some "if" to detect the rotation for eax axis,m and set it to the limit, like this:
Transform trans = gameObject.transform;
if (trans.EulerAngles.x > 45)
{
trans.EulerAngles = new Vector3 (45, trans.EulerAngles.y, trans.EulerAngles.z);
}
same for Y ...
if (trans.EulerAngles.y > 45)
{
trans.EulerAngles = new Vector3 (trans.EulerAngles.x, 45, trans.EulerAngles.z);
}
And same for Z...
So if after Rotate() the value is over 45, it will be 45 again.
Bye!
Your answer
Follow this Question
Related Questions
Need help designing a sinking platform that lets objects pass through from underneath 1 Answer
Making a held object visible at all times while preserving head bobbing (FPS Controller) 0 Answers
How to export a finished game? (Help please) 4 Answers
3D - Move this player lean script (Leaning to the right) to the left. (EASY) 1 Answer