How to keep first person camera from tilting forward/backward

How can I keep the camera from tilting forward/backward when looking up or down?

I currently have my Player GameObject, with the main camera as a child

Player Main Camera

My mouselook script is attached to the player, as is the character controller, etc. My camera is not in the center of my character controller, it's actually up a about 3/4ths (where the head would be, but not at the top). However, whenever my character looks down...the camera tilts forward, clipping through terrain.

Here is a screenshot: alt text

In this picture, I am looking down...see how the camera is out to the left, facing down? I need it to stay aligned in the character.

Am I attaching the camera wrong, or do I just need to modify the mouselook script to keep the camera in a fixed position?

You should look at the mouseLook script that comes with the FPS example, this is the code:

using UnityEngine;
using System.Collections;</p>

<p>/// MouseLook rotates the transform based on the mouse delta.
/// Minimum and Maximum values can be used to constrain the possible rotation</p>

<p>/// To make an FPS style character:
/// - Create a capsule.
/// - Add a rigid body to the capsule
/// - Add the MouseLook script to the capsule.
///   -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
/// - Add FPSWalker script to the capsule</p>

<p>/// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
/// - Add a MouseLook script to the camera.
///   -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {</p>


```
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;

public float minimumX = -360F;
public float maximumX = 360F;

public float minimumY = -60F;
public float maximumY = 60F;

private float rotationX = 0F;
private float rotationY = 0F;

private Quaternion originalRotation;

void Update ()
{   
    //originalRotation = transform.localRotation;

    if (axes == RotationAxes.MouseXAndY)
    {
        // Read the mouse input axis
        rotationX += Input.GetAxis("Mouse X") * sensitivityX;
        rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

        rotationX = ClampAngle (rotationX, minimumX, maximumX);
        rotationY = ClampAngle (rotationY, minimumY, maximumY);

        Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
        Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);

        transform.localRotation = originalRotation * xQuaternion * yQuaternion;
    }   
    else if (axes == RotationAxes.MouseX)
    {

        rotationX += Input.GetAxis("Mouse X") * sensitivityX;

        rotationX = ClampAngle (rotationX, minimumX, maximumX);

        Quaternion xQuaternion = Quaternion.AngleAxis   (rotationX, transform.up);
        Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, -transform.right);            

        transform.localRotation = originalRotation * xQuaternion * yQuaternion; 
    }
    else
    {
        rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
        rotationY = ClampAngle (rotationY, minimumY, maximumY);

        Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);

        transform.localRotation = originalRotation * yQuaternion;
    }
}

void Start ()
{   
    // Make the rigid body not change rotation
    if (rigidbody)
        rigidbody.freezeRotation = true;

    originalRotation = transform.localRotation;
}

public static float ClampAngle (float angle, float min, float max)
{
    if (angle < -360F)
        angle += 360F;
    if (angle > 360F)
        angle -= 360F;
    return Mathf.Clamp (angle, min, max);
}

void DidPause (bool paused)
{
    enabled = !paused;
}

```


<p>}

the camera is inside the player object. The player object has an instance of this script with property Axes as MouseX and the cam inside the player has the same script but with property MouseY. If this doesn't suite you at least you can see how they clamp to a max angle :)