Want sprite to move to mouse click position instead of teleporting or moving a few pixels

Hello, probably a noob question, but I’ve looked everywhere and tried every solution I could find. And none worked.

I simply want my sprite character to move to the mouse click position along X axis. But after trying every solution, the sprite either teleports to the end position or moves the distance defined in ‘moveSpeed’.

I want him to ‘move’ to the mouse click position in the most human way possible - slowly tumbling across, that is. Any help will be super appreciated, thanks!

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

public class MovementController : MonoBehaviour
{
    public LayerMask clickMask;
    public float moveSpeed;

    void Update()
    {
        Vector3 clickPosition = -Vector3.one;

        if (Input.GetMouseButtonUp(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if(Physics.Raycast(ray, out hit, 100f, clickMask))
            {
                clickPosition = hit.point;
                clickPosition.z = transform.position.z;
                clickPosition.y = transform.position.y;
            }

    
            if (transform.position.x != clickPosition.x)
            {
                if (clickPosition.x > transform.position.x)
                {
                    //walk right
                    //transform.position += Vector3.right * moveSpeed * Time.deltaTime;

                }
                else if (clickPosition.x < transform.position.x)
                {
                    //walk left
                    transform.position += Vector3.left * moveSpeed * Time.deltaTime;
                }
            }
            Debug.Log(clickPosition);
    
        }
    }
}

hello, try this script. you need an extra var for the amount the position will change. the object will continue moving qhwn you end up the touch if you use a high incrementDistance

public Vector3 targetPosition;

public void Awake()
{
    targetPosition = transform.position;
}

void Update()
{
    Vector3 clickPosition = -Vector3.one;

    if (Input.GetMouseButtonUp(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 100f, clickMask))
        {
            clickPosition = hit.point;
            clickPosition.z = transform.position.z;
            clickPosition.y = transform.position.y;
        }

        if (transform.position.x != clickPosition.x)
        {
            if (clickPosition.x > transform.position.x)
            {
                //walk right
                targetPosition += Vector3.right * incrementDistance * Time.deltaTime;//the 5 is just for testing use the desire position

            }
            else if (clickPosition.x < transform.position.x)
            {
                //walk left
                targetPosition += Vector3.left * incrementDistance * Time.deltaTime;
            }
        }
        Debug.Log(clickPosition);

    }

    transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);
}