- Home /
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.
Answer by robertbu · Jun 17, 2013 at 11:09 PM
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().
Your answer
Follow this Question
Related Questions
Make Gameobject Stand On Surface Facing Certain Direction 0 Answers
Unity Rotate Raycast on Quaternion 1 Answer
LookAt Translation Not Sticking 1 Answer
How would I rotate an object relative to another without parenting? 2 Answers
How can I turn my cube object to the direction it is traveling? 1 Answer