Camera Is glitching when I move

Hi, I am trying to make an open world game but my camera keeps glitching when I move. This is the script on my camera:

using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour
{
    public float sensitivity = 5.0f;
    public float smoothing = 2.0f;
    public GameObject player;
    public Transform centre;
    private Vector3 offset;
    public Transform target;
    Vector2 mouseLook;
    Vector2 smoothV;

    GameObject character;
    void Start()
    {
        character = this.transform.parent.gameObject;

    }
    void Update()
    {
        //transform.LookAt(target);
        var md = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));

        md = Vector2.Scale(md, new Vector2(sensitivity * smoothing, sensitivity * smoothing));
        smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
        smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);
        mouseLook += smoothV;

        transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
        character.transform.localRotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);


        if (Input.GetKeyDown("enter"))
        {
            Cursor.lockState = CursorLockMode.Locked;
        }
    }
}

Thanks!

I would suggest un-parenting your camera from the player. and use this script:

using UnityEngine;
/* COMPLETED */

namespace Others
{
    public class cameraRig : MonoBehaviour
    {

        private void Start()
        {
            var customCamFollowPoints = GameObject.FindGameObjectsWithTag("camTarget");

            foreach (GameObject b in customCamFollowPoints)
            {
                if (b.transform.parent.gameObject.activeSelf)
                {
                    target = b.transform;
                }
            }
        }

        private Vector3 velocity = Vector3.zero;
        // The target we are following
        private Transform target;

        [Tooltip("How long it takes for this object to transition to the targets position. Only is lerp is off")]
        public float smoothTime = 0.2f;
        public float _wantedRotationalAngle = 0f;

        // The distance in the x-z plane to the target
        public float distance = 27f;

        // the height we want the camera to be above the target 
        public float height = 19f;

        public float rotationDamping = 8;
        public float heightDamping = 10;

        private void OnEnable()
        {
            //  LoadPlayer.OnLoadPlayer += getTarget;
        }

        private void OnDisable()
        {
            // LoadPlayer.OnLoadPlayer -= getTarget;
        }

        /// <summary>
        /// Search for te gameobject with tag "camtarget"
        /// </summary>
        private void getTarget()
        {
            target = GameObject.FindGameObjectWithTag("camTarget").transform;
            Debug.Log("Target found. Target name is :" + target.gameObject.name);
        }
        // Update is called once per frame


        void LateUpdate()
        {
            camFollowMethod();
        }

        public void camFollowMethod()
        {
            // Early out if we don't have a target
            if (target == null)
                return;

            // Calculate the current rotation angles
            var wantedHeight = target.position.y + height;

            var currentRotationAngle = transform.eulerAngles.y;
            var currentHeight = transform.position.y;

            // Damp the rotation around the y-axis\
            currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, _wantedRotationalAngle, rotationDamping * Time.deltaTime);

            // Damp the height
            currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);

            // Convert the angle into a rotation
            var currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);

            // Set the position of the camera on the x-z plane to:
            // distance meters behind the target
            transform.position = target.position;
            transform.position -= currentRotation * Vector3.forward * distance;

            // Set the height of the camera
            transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);

            // Always look at the target
            transform.LookAt(target);

        }

    }
}

I have more than one targets in a scene that why i use customCamFollowPoints array but you can just make target var public and delete unity start method.