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

Поворот и вращение объектов в Unity

Каждый разработчик игр знает, что без вращения и поворотов игровых объектов невозможно сделать нормальную игру. И перед тем, как начать разбор поворота/вращения объекта, создадим игровой объект, и назовём его Player. Его мы и будем вращать.

Как поворот объекта, так и вращение, осуществляется путём изменения значений компонента Transform, и его свойства Transform.rotation.

И начнём данную статью с вращения, так как он более прост и понятен.

Вращение игрового объекта

Для начала разберём, что означает вращение? Вращение, это плавное изменение значений Transform.rotation, вокруг определённых осей. Вот их нам и нужно менять.

Для изменения этих значений, нам поможет метод Transform.Rotate. Работает он следующим образом:

void Update()
{
    transform.Rotate(0, 0, 1);
}

Этот скрипт будет вращать вашего персонажа по оси Z со скоростью 1. Вы так же можете выбрать другую ось вращения, например X или Y. Или же увеличить скорость вращения на 2.

void Update()
{
    transform.Rotate(2, 0, 0);
}

На этом всё! Как видите, вращать игровые объекты очень просто. Теперь перейдём к повороту, который по своей сути немного тяжелее.

Поворот игрового объекта

Поворот персонажа подразумевает его поворот на 180 градусов по одной из осей. Например, очень часто такое может понадобиться в 2д играх, преимущественно платформерного типа. Поэтому в качестве примера мы будем использовать 2д персонажа, которого нужно развернуть по горизонтали, то-есть по оси X.

Предыдущий код вращения нам не поможет, поскольку там мы вращали с помощью специального метода, который прибавляет к старым значениям - новые. Здесь же нам необходимо устанавливать конкретные значения.

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

Vector3 rotate = transform.eulerAngles;
rotate.y = 180;
transform.rotation = Quaternion.Euler(rotate);

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

  • В первой строке с помощью метода Transform.eulerAngles мы получаем значения roration в виде углов эйлера.
  • Во второй строке установили значение y в 180, тем самым развернули объект на 180 градусов.
  • В третьей строке, элеровские значения конвертируем в кватернионы, и сохраняем полученные данные.

Таким же образом мы можем вернуть объект в нормальное положение:

Vector3 rotate = transform.eulerAngles;
rotate.y = 0;
transform.rotation = Quaternion.Euler(rotate);

Аналогичным образом мы можем разворачивать наш объект по любой оси, изменив rotate.y на rotate.x или на rotate.z.

Если остались вопросы, пишите в комментариях. А так же ставьте лайки, если помог :)

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

Комментарии

7
lol2 1 год назад

какой полный код поворота игрового объекта?

Admin 1 год назад

lol2, если тебе нужно с проверкой на нажатие клавиш, то вот:.


using UnityEngine;

public class rotatePlayer : MonoBehaviour
{
    void Update()
    {
        if (Input.GetAxis("Horizontal") > 0)
        {
            Vector3 rotate = transform.eulerAngles;
            rotate.y = 0;
            transform.rotation = Quaternion.Euler(rotate);
        }
        if (Input.GetAxis("Horizontal") < 0)
        {
            Vector3 rotate = transform.eulerAngles;
            rotate.y = 180;
            transform.rotation = Quaternion.Euler(rotate);
        }
    }
}

Name_1122 1 год назад

а как сделать так чтобы он вращался без остановки?

Name_1138 1 год назад

Name_1122, если тебя интересует непрерывное вращение вокруг какой-то оси, то тебе нужно:
transform.Rotate(Vector3);

Например: если тебе нужно вращение вокруг оси y, то transform.Rotate(0, 1f, 0);

Name_1148 1 год назад

А как сделать чтобы поворот был не резким, а плавным?

Terminaft 1 год назад

Name_1148, .transform.Rotate(0,0,speedRotate*Time.deltaTime);

Terminaft 1 год назад

Как обнулить положение. т.е. повернул объект и потом значения сделать нулевыми а обьек оставит в прежнем положении?

Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь