Mover al personaje siempre a velocidad instantánea puede sentirse brusco.

Podés suavizar cambios con aceleración.

Mathf.MoveTowards

velocidadActual = Mathf.MoveTowards(
    velocidadActual,
    velocidadObjetivo,
    aceleracion * Time.deltaTime
);

Vector3.MoveTowards

movimientoActual = Vector3.MoveTowards(
    movimientoActual,
    movimientoObjetivo,
    aceleracion * Time.deltaTime
);

Lerp

movimientoActual = Vector3.Lerp(
    movimientoActual,
    movimientoObjetivo,
    suavizado * Time.deltaTime
);

Lerp genera una aproximación suave, pero no representa una aceleración constante.


Ejemplo

Vector3 objetivo =
    direccion * velocidadMaxima;

movimientoActual = Vector3.MoveTowards(
    movimientoActual,
    objetivo,
    aceleracion * Time.deltaTime
);

Frenado distinto

Podés tener:

[SerializeField]
private float aceleracion = 20f;

[SerializeField]
private float desaceleracion = 30f;

y elegir uno según haya input.