transform.LookAt boundaries

private void LookAt(Vector3 point)
{
if(head != null)
{
point.y = head.position.y;
head.LookAt(point);
}
}

This is the code I use to make head object look in the direction of a point. It works fine, but I’d like to add some limits to this rotation, because right now head can spin 360*.

What I’d like to know is how to prevent the head from rotating more than 30* left or right, while still trying to look at the point if it’s within the range.

I’m assuming the head is on a body that turns, and that the body is walking on the XZ plane. You can limit it as follows:

private void LookAt(Vector3 point)
{     
    if(head != null)
    {
        Vector3 v3T = point;
        v3T.y = body.forward.y;
        if (Vector3.angle(body.forward, v3T) <= 30) {
            point.y = head.position.y; 
            head.LookAt(point);
         }
    }
}

Note this solved the specific problem you asked about, but potentially introduces a new ones. If the last point disappears on the left and a new one appears on the right, the head will immediately snap to the new target. In addition if all the targets disappear, then the head will be left at the last rotation. If you need to solve these problems, look into Quaternion.LookRotation() and Quaternion.Slerp().