- Home /
How to set limits to the rotation of an object with the mouse?
Hello.
I am newbie using Unity and I have a problem that is how to establish some parameters or limits in the rotation of an object and even the same camera with the mouse.
My current code is:
transform.Rotate((Input.GetAxis("Mouse Y") * speed * Time.deltaTime), (Input.GetAxis("Mouse X") * speed * Time.deltaTime), 0, Space.World);
The problem with this code is that it rotates the object, but if a limit, ie the object can rotate 180 degrees or up to 360 degrees and what I want or look for is to rotate with a limit of 160 degrees or less, because what I seek is to be able to create a hand weapon which will remain in the front, but it will be able to rotate to aim at the target, without it turning over backwards or fence to one side and cross the character
Thanks and sorry for my english.
Answer by Abraham1532002 · Aug 10, 2017 at 01:15 PM
Find and improve my solution which is:
public float sensitivity = 10f;
public float maxYAngle = 80f;
private Vector2 currentRotation;
void Update () {
currentRotation.x += Input.GetAxis("Mouse X") * sensitivity;
currentRotation.y -= Input.GetAxis("Mouse Y") * sensitivity;
currentRotation.x = Mathf.Clamp(currentRotation.x, -maxYAngle, maxYAngle);
currentRotation.y = Mathf.Clamp(currentRotation.y, -maxYAngle, maxYAngle);
transform.rotation = Quaternion.Euler(currentRotation.y,currentRotation.x,0);
if (Input.GetMouseButtonDown(0))
Cursor.lockState = CursorLockMode.Locked;
}
The solution to my problem I found it in: http://answers.unity3d.com/questions/1344322/free-mouse-rotating-camera.html
Answer by unidad2pete · Aug 09, 2017 at 08:29 PM
Try checking if your rotation + new rotation is on your limit, something like this:
float X = Input.GetAxis("Mouse X") * speed * Time.deltaTime;
float Y = Input.GetAxis("Mouse Y") * speed * Time.deltaTime;
float limitRotationX = 160;
float limitRotationY = 160;
if (transform.eulerAngles.x + X < limitRotationX)
{
transform.Rotate(X, 0, 0);
}
if (transform.eulerAngles.y + Y < limitRotationX)
{
transform.Rotate(0, Y, 0);
}
Friend a question when you run your code is not rotating to the x axis and reaching a certain point on the axis and pausing and not rotating anymore