Каждый разработчик игр знает, что без вращения и поворотов игровых объектов невозможно сделать нормальную игру. И перед тем, как начать разбор поворота/вращения объекта, создадим игровой объект, и назовём его 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.
Если остались вопросы, пишите в комментариях. А так же ставьте лайки, если помог :)
какой полный код поворота игрового объекта?