Place character on the ground

Hi. Anyone how to fix this? When I press the ‘W’ key the character will walk but my character goes up a little. As you can on the screenshot, the character is not on the terrain’s ground. How can I place the character on the ground? 125712-character.png

So far, this code I used:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class CharacterMovement : MonoBehaviour {

    public Transform playerCam, character, centerPoint;
    private float mouseX, mouseY;
    public float mouseSensitivity = 10f;
    public float mouseYPosition = 1f;
    private float moveFB, moveLR;
    public float moveSpeed = 2f;
    private float zoom;
    public float zoomSpeed = 2;
    public float zoomMin = -2f;
    public float zoomMax = -30f;
    public float rotationSpeed = 5f;

    void Start() {
        zoom = -30;
    }

    void Update() {
        zoom += Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
        if(zoom > zoomMin) {
            zoom = zoomMin;
        }

        if(zoom < zoomMax) {
            zoom = zoomMax;
        }

        playerCam.transform.localPosition = new Vector3 (0, 3, zoom);

        if(Input.GetMouseButton(1)) {
            mouseX += Input.GetAxis("Mouse X") * mouseSensitivity;
            mouseY -= Input.GetAxis("Mouse Y") * mouseSensitivity;
        }
        
        mouseY = Mathf.Clamp(mouseY, -60f, 60f);
        playerCam.LookAt(centerPoint);
        centerPoint.localRotation = Quaternion.Euler(mouseY, mouseX, 0);

        moveFB = Input.GetAxis("Vertical") * moveSpeed;
        moveLR = Input.GetAxis("Horizontal") * moveSpeed;

        Vector3 movement = new Vector3(moveLR, 0, moveFB);
        movement = character.rotation * movement;
        character.GetComponent<CharacterController> ().Move(movement * Time.deltaTime);
        centerPoint.position = new Vector3(character.position.x, character.position.y + mouseYPosition, character.position.z);

        if (Input.GetAxis ("Vertical") > 0 | Input.GetAxis ("Vertical") < 0) {
 
            Quaternion turnAngle = Quaternion.Euler (0, centerPoint.eulerAngles.y, 0);
            character.rotation = Quaternion.Slerp (character.rotation, turnAngle, Time.deltaTime * rotationSpeed);
 
        }
    }
}

the visual representation should be independent from the collision or movement logic. if the character is too high, pause the game, move it down, memorize the y value of the transform, stop the game and enter that value. the visual is hopefully a child of the collider so it should be easy to adjust.