
Приветствую начинающие разработчики! В данной статье мы научимся осуществлять поворот 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. Благодаря этому наш персонаж вращается в то место, где в данный момент находится курсор мыши. Поздравляем!
Если Вам было что-то не понятно, буду рад ответить на вопросы в комментариях. Всем спасибо :)