@DorVeytarn
учу юнити и C#

Как сделать равномерный Quaternion.Lerp?

Есть ли возможность сделать Quaternion.Lerp более плавным и равномерным? Чтобы скорость у краёв значений была хоть примерна равна серёдке?

Допустим, мне нужно вращать объект от текущего угла, до заданного. Но поворот должен быть плавным. А он в начале и в конце еле-еле плетётся.

[SerializeField] private float _rotationSpeed;
[SerializeField] private Quaternion _targetRotation;

private Quaternion _targetRotation;

private Quaternion _maxRotation;
private Quaternion _minRotation;

 private void Start()
    {
        _targetRotation = _maxRotation;

        StartCoroutine(LoopRotation());
    }

private void Rotate()
    {
        transform.rotation = Quaternion.LerpUnclamped(transform.rotation, _targetRotation, _rotationSpeed * Time.deltaTime);
    }

private IEnumerator LoopRotation()
    {
        while (true)
        {
            Rotate();
            //просто изменение угла, к которому нужно стремиться
            if (transform.rotation.z >= _maxRotation.z - 0.02f)
                _targetRotation = _minRotation;
            else if (transform.rotation.z <= _minRotation.z + 0.02f)
                _targetRotation = _maxRotation;
            yield return null;
        }
    }
  • Вопрос задан
  • 519 просмотров
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos Куратор тега Unity
Корутина ничего не вращает. Вращает ваш код, выполняемый в корутине. Вот его и стоит прикладывать к вопросу - наверняка в нем ошибка и он нелинейный.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы