The other issue I have with Lerp/Slerp is it is generally implemented in a way that is not frame rate independent, despite being scaled by deltaTime.
Take, for example:
myFloat = Mathf.Lerp(myFloat, targetValue, 0.5 * Time.deltaTime);
To keep the math simple, if you have a frame rate of 1.0fps, after one second that calculation will have run once, giving you a result that is 50% of the way to the targetValue.
On a faster computer, running at 2fps, that function will calculate twice: the first moving it 25% toward the final value, the second moving just 18.75% of the original difference (because the Lerp is performed against the result of the first frame, with a difference that’s now only 75% of the original). In the same time, the faster computer will only move the value 43.75% of the way to the targetValue.
At real frame rates, the differences are not as drastic, but it is still not independent. In a multiplayer environment, different clients would be out of sync.
You can fix that by accumulating deltaTime from the start of the event and doing Lerp only between the original unmodified values using the total delta since start to scale the ratio. But, at that point, you’ve replicated what MoveTowards is already doing. For times when you want a value that smoothly accelerates or slows to a stop, there are SmoothDamp and SmoothDampAngle functions that work similarly, or assets like DOTween that provide additional tweening functions.