Плавный поворот по вектору Unity

122
18 февраля 2022, 01:30
Vector2 new_rotation = _enemy.transform.position - transform.position;
transform.up = new_rotation;

данный код резко поворачивает объект по направлению вектора. А как сделать плавный поворот по вектору?

Answer 1
    [SerializeField]
    float _velocity = 10; //скорость поворота
    Transform _target; //Цель, за которой будем следить
    public void SetTarget(Transform target)
    {
        _target = target; //устанавливаем цель, например откуда-то снаружи
    }
    private void Update()
    {
        if (_target != null) //если есть цель - поворачиваемся в её сторону
        {
            Vector2 new_rotation = _target.position - transform.position;
            transform.up = Vector2.MoveTowards(transform.up, new_rotation, Time.deltaTime * _velocity); 
        }
    }

Метод Vector2.MoveTowards (и его перегрузки для других значимых типов) сдвигает нас от текущего значения в сторону целевого на значение третьего параметра (maxDistanceDelta), но не дальше, чем до целевого значения. Например:

Mathf.MoveToward(0, 1, 0.5f)    //вернёт 0.5f    
Mathf.MoveToward(0.7f, 1, 0.5f) //вернёт 1    
Mathf.MoveToward(0.5f, 0, 0.6f) //вернёт 0 
READ ALSO
Документирование форматов информационного обмена по средствам парсинга xsd. Ищу исходники

Документирование форматов информационного обмена по средствам парсинга xsd. Ищу исходники

Пишу софт, который документирует (описывает) формат обмена данными для SOAP сервисов

99
Как менять CurrentContentVM у RootVM?

Как менять CurrentContentVM у RootVM?

Я создал модели контента как сказано в ответе чувака этого вопроса

81
Есть ли аналог VB.Net метода Strings.Format в C#?

Есть ли аналог VB.Net метода Strings.Format в C#?

Имеется старый код на VBNet, который портируется на C#

84