Всем привет. В данной статье мы разберём, как осуществлять поворот персонажа в сторону его движения. Разбирать поворот персонажа мы будем на примере 2д платформера, в которой можно двигаться только по оси Х, то-есть влево и вправо.
Предположим, у нас имеется следующий код передвижения персонажа по оси Х:
void Update()
{
moveVector.x = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveVector.x * speed, rb.velocity.y);
}
Для осуществления поворота персонажа мы будем менять поворот(Rotation) объекта по оси Y, компонента Transform.
Для этого в метод Update() допишем следующий код:
if (Input.GetAxis("Horizontal") > 0)
{
Quaternion rot = transform.rotation;
rot.y = 0;
transform.rotation = rot;
}
if (Input.GetAxis("Horizontal") < 0)
{
Quaternion rot = transform.rotation;
rot.y = 180;
transform.rotation = rot;
}
Здесь мы проверяем, в какую сторону движеться наш персонаж. Если вправо, то в строке #4 устанавливаем поворот объекта в 0 градусов по оси Y, то-есть, стандартное положение объекта. А если персонаж движется влево, то в строке #11 устанавливаем поворот в 180 градусов, то-есть разворачиваем его по горизонтали.
Данный способ разворота персонажа хорош тем, что вместе с персонажем будут поворачиваться и все его внутренние(вложенные) игровые объекты.
Иногда того, что мы проделали, считается достаточным. И на этом можно было бы завершить данную статью. Но бывают случаи, когда приходиться дополнять разворот персонажа дополнительным кодом, чтобы персонаж был повёрнут не только визуально, но и программно. Давайте усовершенствуем наш разворот.
Для начала объявим новую переменную, которая будет хранить информацию и том, что персонаж повёрнут именно в правую сторону.
public bool FaceRight = true;
И если персонаж начинает своё движение влево, то переменной FaceRight устанавливаем значение false. Если вправо, то true. И в результате, ВЕСЬ итоговой код выглядит следующим образом:
public bool FaceRight = true;
void Update()
{
moveVector.x = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveVector.x * speed, rb.velocity.y);
if (Input.GetAxis("Horizontal") > 0)
{
FaceRight = true;
Quaternion rot = transform.rotation;
rot.y = 0;
transform.rotation = rot;
}
if (Input.GetAxis("Horizontal") < 0)
{
FaceRight = false;
Quaternion rot = transform.rotation;
rot.y = 180;
transform.rotation = rot;
}
}
Вот такой у нас получился код, который разворачивает персонажа не только визуально в игровой сцене, но и программно, занося необходимое значение в переменную FaceRight. Бывают случаи, когда нам необходимо развернуть персонажа ТОЛЬКО программно, или ТОЛЬКО визуально. Всё зависит от самой игры.
Если же разворот персонажа должен происходить не только вправо и влево, но ещё вверх и вниз, то в данном случае в переменной FaceRight вместо хранения данных true / false, необходимо хранить примерно следующие значения: right / left / top / bottom.
На этом всё. Если Статья была для Вас полезной, буду рад Вашим лайкам.