RTS click to move : through the terrain

var smooth:int;
var gravity:int = 10;

   static var grounded:boolean = false;
   
   
   
     
 
        private var targetPosition:Vector3;
        var moveDirection:Vector3 = Vector3.zero;
 
       
 
       
 
        var speed = 60;
 
       
 
         
 
        function Update () {
        
        if(grounded == false)
        {
        
        moveDirection.y -= gravity * Time.deltaTime;
        }
 
       
        
        var controller:CharacterController = GetComponent(CharacterController);
        var flags = controller.Move(moveDirection * Time.deltaTime);
        grounded = (flags & CollisionFlags.Below) != 0;
        
       
        
        if(grounded==false)
        {
       
        this.transform.position.y -= gravity * Time.deltaTime;
        }
 
            if(Input.GetKeyDown(KeyCode.Mouse0))
 
            {
 
           
 
            smooth=1;
 
           
 
                var playerPlane = new Plane(Vector3.up, transform.position);
 
                var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
 
                var hitdist = 0.0;
 
               
 
                if (playerPlane.Raycast (ray, hitdist)) {
 
                    var targetPoint = ray.GetPoint(hitdist);
 
                    targetPosition = ray.GetPoint(hitdist);
 
                    var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
 
                    transform.rotation = targetRotation;
 
                   
 
                     
 
                }
 
             
 
            }
 
           
 
                var dir:Vector3 = targetPosition - transform.position;
 
    var dist:float = dir.magnitude;
 
    var move:float = speed * Time.deltaTime;
 
    if(dist > move){
 
    transform.position.x += dir.x* move;
    transform.position.z += dir.z* move;
    
 
    } else {
 
    transform.position.x = targetPosition.x;
    transform.position.z = targetPosition.z;
 
    }
 
           
 
           
 
            
 
           
 
         
 
         
 
         
 
         }

I make the RTS click to move script and it have gravity function,but when character move on the terrain that have some hills it well pass through the hills and fall.
How can i fix it?

Hy @wueric0622 you can use navmesh and navmesh agent to achieve the result.
You can follow the video to make a simple click to move which will work everywhere. Find the link below