Unity 3d | Как сделать плавную смену FOV?

Нужна именно плавное изменение FOV, сейчас оно резкое(даже если lerptime слишком большой или слишком маленький). Пробовал умножать на Time.deltatime, Time.time, так же, вместо Lerp() использовать MoveTowards и циклом for с задержкой, ничего из этого не помогло сделать смену плавной. Метод вызывается в Update()

 private void MovementUpdate()
{
    if (Input.GetKeyDown(KeyCode.Space) && IsGroundCheck()) 
    { Rb.AddForce(new Vector3(0, 1, 0) * JumpForce); }



    if (Input.GetKeyDown(KeyCode.LeftShift) && !(IsCrouched)){
        Speed += 300;
        Camera.fieldOfView = Mathf.Lerp(Camera.fieldOfView, RunFOV, lerpTime);
    }
    else if (Input.GetKeyUp(KeyCode.LeftShift)) { if (Speed > 500){
            Speed -= 300;
            Camera.fieldOfView = Mathf.Lerp(Camera.fieldOfView, NormalFOV, lerpTime);
        }
    }

Ответы (2 шт):

Автор решения: Yaroslav

Управление это одна история, персонаж другая, камера третья, это вообще должно быть три разных класса! Мухи отдельно, котлеты отдельно!

public class ActionFOV : MonoBehaviour
{
    [SerializeField] float _default = 40f;
    [SerializeField] float _action = 60f;
    [Space]
    [SerializeField] float _toDefaultSpeed = 10f;
    [SerializeField] float _toActionSpeed = 40f;
    private Camera _camera;
    private float _current;

    public bool IsAction { get; set; }

    private void Start ()
    {
        _camera = Camera.main;
        _current = _default;
    }

    private void Update ()
    {
        if (IsAction)
            _current += _toActionSpeed * Mathf.Sign(_action - _default);
        else
            _current += _toDefaultSpeed * Mathf.Sign(_default - _action);
        _current = Mathf.Clamp(_current, _default, _action);
        _camera.fieldOfView = _current;
    }
}
→ Ссылка
Автор решения: Ynot

Проблема решена, вместо GetKeyDown поставил GetKey(в другом условии, не трогая скорость).

→ Ссылка