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

Поворот 2д персонажа в сторону его движения

Всем привет. В данной статье мы разберём, как осуществлять поворот персонажа в сторону его движения. Разбирать поворот персонажа мы будем на примере 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.

На этом всё. Если Статья была для Вас полезной, буду рад Вашим лайкам.

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

Комментарии

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