Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Поворот 2D персонажа в сторону курсора мыши

Приветствую начинающие разработчики! В данной статье мы научимся осуществлять поворот 2д персонажа вокруг собственной оси в сторону курсора мыши. Статья будет очень короткой, поскольку реализовывается это всего в пару строк, но полезной.

Первым делом нам необходимо определить, в какой точке игрового пространства находится наш курсор мыши. Для этого пропишем в методе Update() следующий код:

void Update()
{
    Vector3 diference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
}

Давайте вкратце разберём этот код:

  • Сначала с помощью свойства Input.mousePosition мы получаем текущее положение мыши в пиксельных координатах.
  • Потом с помощью свойства Camera.ScreenToWorldPoint мы преобразуем положение мыши в пиксельных координатах - в мировое пространство.
  • Далее, от полученного значения позиции курсора в мировом пространстве, отнимаем позицию нашего персонажа, для того, чтобы позиция курсора мыши получать не относительно мирового пространства, а относительно нашего персонажа.
  • И полученные данные(позицию курсора мыши), заносим в переменную diference

Для более подробной информации о поиске позиции курсора мыши, можете в соответствующей статье. Но а теперь переходим к самому важному.

Поворот Персонажа

Координату позиции курсора относительно игрового объекта(персонажа) мы получили в переменной diference. Теперь допишем в предыдущий код две новые строчки, которые и будут поворачивать наш персонажа в сторону координат, указанных в diference:

void Update()
{
    Vector3 diference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
    float rotateZ = Mathf.Atan2(diference.y, diference.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.Euler(0f, 0f, rotateZ);
}

Сначала в строке #4 с помощью метода Mathf.Atan2 мы получили угол в радианах от данных переменной diference. А дальше с помощью свойства Mathf.Rad2Deg, полученные значения умножили на константу, которая преобразовывает радиан в градусы. Полученные данные занесли в переменную rotateZ .

Потом в строке #5 с помощью метода Quaternion.Euler мы получаем значение поворота, и присваиваем это значение нашему персонажу, то-есть в transform.rotation. Благодаря этому наш персонаж вращается в то место, где в данный момент находится курсор мыши. Поздравляем!

Если Вам было что-то не понятно, буду рад ответить на вопросы в комментариях. Всем спасибо :)

Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

0
Будьте первым, кто оставит комментарий к этому посту
Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь