# Problems with limiting angles

Hello, I am in dire need of help here. What I’m trying to achieve is some kind of limit to an object’s rotation. I’m working on a game about table soccer where roulettes aren’t allowed on some tables, but to limit the rotation of the handles just seems impossible. I’ve looked at other questions but I couldn’t implement none of them in it. The handles right now are just 1 floating rectangle in the middle of the field, for testing reasons. The code is as follows:

``````using UnityEngine;
using System.Collections;

public class ctrl : MonoBehaviour {

public GameObject handle1;
public GameObject handle2;
public GameObject handle3;
public GameObject handle4;
public float handler = 0.00f;

// Update is called once per frame
void Update () {

//Everything needs a limit; even the rotation of the handles.

//The first handle's limits
if (handle1.transform.rotation.x < -80)
{
handle1.transform.rotation = Quaternion.Euler(-80,0,0);
Debug.Log("gud1");
}
if (handle1.transform.rotation.x > 110)
{
handle1.transform.rotation = Quaternion.Euler(110,0,0);
}

//The second handle's limits
if (handle2.transform.rotation.x < -80)
{
handle2.transform.rotation = Quaternion.Euler(-80,0,0);
}
if (handle2.transform.rotation.x > 110)
{
handle2.transform.rotation = Quaternion.Euler(110,0,0);
}

//The third handle's limits
if (handle3.transform.rotation.x < -80)
{
handle3.transform.rotation = Quaternion.Euler(-80,0,0);
}
if (handle3.transform.rotation.x > 110)
{
handle3.transform.rotation = Quaternion.Euler(110,0,0);
}

//The fourth handle's limits
if (handle4.transform.rotation.x < -80)
{
handle4.transform.rotation = Quaternion.Euler(-80,0,0);
}
if (handle4.transform.rotation.x > 110)
{
handle4.transform.rotation = Quaternion.Euler(110,0,0);
}

handle1.transform.Rotate(handler,0,0);
handle2.transform.Rotate(handler,0,0);
handle3.transform.Rotate(handler,0,0);
handle4.transform.Rotate(handler,0,0);

//Left
if (Input.GetAxis("Mouse X")<0)
{
handler += 2.50f;
Debug.Log("Mouse moved left");
}
if (handler > 0)
{
handler -= 1.25f;
}
if (handler > 5.00f)
{
handler = 5.00f;
}
//Right
if (Input.GetAxis("Mouse X")>0)
{
handler -= 2.50f;
Debug.Log("Mouse moved right");
}
if (handler < 0)
{
handler += 1.25f;
}
if (handler < -5.0f)
{
handler = -5.0f;
}
}
}
``````

I’ve tried that but nothing seems to change. I’ve also tried transform.rotation.x but it just gives errors out because apparently that statement is read-only and can’t be edited separatedly.

@Marcos42563 From what I see in the code, it appears to me you are trying to rotate the paddle about the x-axis and are trying to constrain limits at how far each handle can turn or rotate.

I don’t know if this will help but I do have code that you can probably look over that deals with limiting angle rotations here:

``````	public float turn_speed;
private float turn_velocity;
public float minAngle,maxAngle;
//angles to modify for turning.
private float x,y,z;

void Start()
{
//set x,y,z angles to modify
x = transform.eulerAngles.x;
y = transform.eulerAngles.y;
z = transform.eulerAngles.z;

//convert frames per second to units per second movement.
turn_velocity = turn_speed * Time.deltaTime;
}

void Update()
{
RotateArrow ();
LaunchBall ();
}
void RotateArrow()
{
//right
if(Input.GetKey(KeyCode.D))
{
z -= turn_velocity;
}
//left
if(Input.GetKey (KeyCode.A))
{
z += turn_velocity;
}

//restrict angle of rotation
z = Mathf.Clamp (z, minAngle, maxAngle);

//set rotate Angle to game Object
transform.eulerAngles = new Vector3 (x, y, z);
}
``````

In the unity editor, you can set the minAngle and maxAngle each handle can turn as they are public.
Furthermore, if you look at the line under the comment //restrict angle of rotation, you can use Mathf.Clamp(angle to rotate about,min Angle,max Angle) to put constraints on how much a paddle can rotate.

Instead of rotating about the z-axis, you can rotate about the x-axis where your following code may look like this:

``````x = Mathf.Clamp(x,minAngle,maxAngle);
``````