Найти в Дзене
Suludadza

Как в Unity крутить объект с определённой скоростью в направлении к другому объекту в 2D.

Не знаете, как крутить врага с заданной скоростью, чтобы он повернулся к вам лицом? Всё предельно просто! Для выполнения данной задачи нам помогут два прекрасных умения: Что насчёт первого - существует непонятная и заковыристая формула: ========================================================== transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, Mathf.Atan2(target.transform.position.y - transform.position.y, target.transform.position.x - transform.position.x) * Mathf.Rad2Deg - 90); ============================================================= target - это объект в, направлении которого мы планируем разворачивать. Естественно, нужно ввести переменную с этим объектом ----------------------------------------- public Transform target; --------------------------------------------- В целом, всё выглядит как то так: Создаём пустышку (хватит и пустого объекта) и вешаем на неё этот скрипт, чтобы она моментально вращалась в направлении цели.
Оглавление

Не знаете, как крутить врага с заданной скоростью, чтобы он повернулся к вам лицом? Всё предельно просто! Для выполнения данной задачи нам помогут два прекрасных умения:

  1. Умение моментально поворачивать объект лицом в сторону цели.
  2. Умение разворачивать объект с помощью Quaternion.RotateTowards

Что насчёт первого - существует непонятная и заковыристая формула:

==========================================================

transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, Mathf.Atan2(target.transform.position.y - transform.position.y, target.transform.position.x - transform.position.x) * Mathf.Rad2Deg - 90);

=============================================================

target - это объект в, направлении которого мы планируем разворачивать.

Естественно, нужно ввести переменную с этим объектом

-----------------------------------------

public Transform target;

---------------------------------------------

В целом, всё выглядит как то так:

Очень широко, не правда ли?
Очень широко, не правда ли?

Создаём пустышку (хватит и пустого объекта) и вешаем на неё этот скрипт, чтобы она моментально вращалась в направлении цели.

Итак, переходим ко второй стадии:

Она не составит особых трудностей.

----------------------------------------------------------------------------------------

transform.rotation = Quaternion.RotateTowards(transform.rotation, target.transform.rotation, 40 * Time.deltaTime);

--------------------------------------------------------------------------------------------

target - пустышка, которую мы создали в первом пункте.

40 - скорость вращения. Её можно поменять.

Остальное не изменяем. Вешаем скрипт с этой формулой на объект, который хотим разворачивать с определённой скоростью.

Можно сделать плавное вращение, но тогда нужно работать с Lerp и Slerp вместо RotateTowards.

Надеюсь, данная статья хоть немного вам помогла так, как она бы в своё время помогла мне. Удачи! Фантазируйте, а также модернизируйте и упрощайте свой код)