(C#)Hi, I am trying to move a camera (SecCamera) with a button , this script already works but que movement is not smooth. The object coordinates changues in 1 frame. I get the coordinates from a scriptable object, the object that should move is the SecCamera. I am using OnMouseDown because the button is attached to a 3d object and this was the only way to recognize the clicks.

public GameObject modelSelection;
public GameObject modelWalk;
public Camera MainCamera;
public Camera SecCamera;
public GameObject targetObject;
public float speed = 10;
bool camera_move_enabled = false;
public camXYZ[] cardCoord;
public Button button;

void OnMouseDown()
{
   
    MainCamera.enabled = false;
    SecCamera.enabled = true;
    modelWalk.SetActive(true);
    modelSelection.SetActive(false);
    
    Debug.Log("button has been clicked");
    Invoke("firstMove1", 1);
}

void firstMove1()
{
    SecCamera.transform.position = Vector3.Lerp(SecCamera.transform.position, cardCoord[0].getCoord, Time.deltaTime * speed);//to absolute position
    Debug.Log("Card Coord:" + cardCoord[0].getCoord);
    Debug.Log("Cam Coord:" + SecCamera.transform.localPosition);
    camera_move_enabled = true;  
}

Vector3.Lerp returns a position between two vectors at the point of t so needs to be called multiple times.

You could achieve this with a coroutine in your case.

    private void OnMouseDown()
    {

        MainCamera.enabled = false;
        SecCamera.enabled = true;
        modelWalk.SetActive(true);
        modelSelection.SetActive(false);

        Debug.Log("button has been clicked");
        StartCoroutine(FirstMove1(SecCamera.transform, speed));
    }

    private IEnumerator FirstMove1(Transform transformToMove, float duration)
    {
        var startPos = SecCamera.transform.position;
        var endPos = cardCoord[0].getCoord;

        var t = 0;

        while (t <= 1)
        {
            transformToMove.position = Vector3.Lerp(startPos, endPos, t);//to absolute position
            t += Time.deltaTime / duration;
            Debug.Log("Card Coord:" + cardCoord[0].getCoord);
            Debug.Log("Cam Coord:" + SecCamera.transform.localPosition);
            camera_move_enabled = true;
            yield return null;
        }

        transformToMove.position = endPos;
    }