Distance to object and rotation lock

Hi, I am making an NPC that when the player is close enough, will turn his head to look at the player. The NPC looks at me, but I want him to only look at me if I am within a certain distance. Also, his head can turn 360 degrees, how do I put on a rotation lock on the y axis, stopping the head from being any rotation other than the two that I define?

By the way, i am using C#.

Typically you want to way 12 to 24 hours before bumping. As for your question:

As @Tanshaydar suggests, Vector3.Distance() can be used to detect the distance:

if (Vector3.Distance(target.position, transform.position) < someValue)

As for restricting the angle, an easy way is to compare the transform.forward of the body to the transform.forward of the head. You can use Vector3.Angle(). I don’t know you code, so but you need access to the body the head is on:

if (Vector3.Angle(transform.forward, body.forward) < someValue)

You also have one other issue. Since you don’t rotate all the time, you likely don’t want to use LookAt(). The issue is that since you don’t know what the rotations is of the head when the object is acquired, the head can immediately snap from one rotation. You can solve this problem by rotating over time:

Quaternion q = Quaternion.LookRotation(target.position - transform.position);
transform.rotation = Quaternion.RotateTowards(transform.rotation, q, Time.deltaTime * speed);