- Home /

# Custom LookAt and what's the math behind it

I've been trying to understand more the math (trigonometry and linear algebra) be$$anonymous$$nd the `transform.LookAt()`

function. I followed a tutorial and tried to modify it to fit my needs, but I haven't succeeded so far.

I'm trying to ac$$anonymous$$eve a camera (in 3d space) that is following a player with a custom offset but at the same time the user can zoom the camera in and out all w$$anonymous$$le still having that `Vector3`

offset. I'm also locking the other axes, and just only want to apply the rotation to the X axis. The problem with my script is that the angle seems to be clamped between `45°`

and `90°`

degrees. I t$$anonymous$$nk I'm probably missing somet$$anonymous$$ng. from the code:

```
private void LookAt(Transform t) {
Vector3 forward = _camPos - (t.position + new Vector3(0, t.GetComponent<CapsuleCollider>().height / 2, 0));
Debug.DrawRay(forward, -forward, Color.blue);
Vector3 right = Vector3.Cross(target.up, forward);
Debug.DrawRay(forward, right, Color.magenta);
Vector3 newUp = Vector3.Cross(Vector3.forward, right);
Debug.DrawRay(forward, newUp, Color.yellow);
float angle = Mathf.Atan2(forward.magnitude, newUp.magnitude) * Mathf.Rad2Deg;
mainCam.transform.rotation = Quaternion.Euler(angle, 0, 0);
}
```

My code first get's the forward vector (

**hypotenuse**in a right triangle) from the camera to the target. Side note here, that t$$anonymous$$s gives the opposite direction, but it doesn't matter becauseit then calculates the "right" vector by having the cross product of the forward vector and the target's up vector

then it calculates the "newUp" vector (

**opposite**in a right triangle)calculates the X rotation by using

**Arcus tangent**w$$anonymous$$ch is the ratio between the**hpyotenuse/opposite**

As you can see, the vector calculations are right like on the screenshot**blue**forward vector**magenta**right vector**yellow**newUp vector

Still, the camera is only focusing on the character properly when I decrease the zoom rate, a.k.a moving the camera closer to it:

What am I missing? Help greatly be appreciated :)

### Your answer

### Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

### Follow this Question

### Related Questions

How to properly offset a Handles.DrawSolidArc by an angle in different axis? 2 Answers

How to lerp with a changing "from" value? 1 Answer

LineRender and Gizmos.DrawRay are showing different results for the same input values 0 Answers

How to create 2 vectors parallel to a plane? or Parallel to Hit.point? For hand IK placement 0 Answers