Как мне исправить вращение импортированной модели?
Некоторые 3D пакеты экспортируют свои модели так, что ось z направлена вверх. Большинство стандартных скриптов в Unity предполагает, что ось y направленна вверх (up) в 3D-мире. Как правило, проще исправить вращение в Unity, чем изменять скрипты для подгонки под такие условия.

Если это возможно, то перед экспортом модели рекомендуется исправить её в пакете 3d моделирования так, что бы ось y смотрела вверх.
Если это невозможно, вы можете исправить это в Unity, добавив дополнительную родительскую трансформацию:
- Создайте пустой GameObject с помощью пункта меню GameObject->Create Empty
- Расположите новый GameObject так, чтобы он оказался в центре вашего меша, или в точке, вокруг которой вы хотите вращать свой объект.
- Перетащите меш в пустой GameObject.
Теперь ваш меш является дочерним для пустого GameObject’а с правильной ориентацией в пространстве. Теперь, при написании скриптов, которые предполагают, что ось y направлена вверх, добавляйте их на родительский пустой GameObject.
Как изменить центр обьекта для правильного вращения?
У меня есть 3д обьект который я экспортировал из блендера:
После я закидываю его в юнити, и получаю вот такой центр:
Как можно изменить центр, без костылей?
Отслеживать
задан 29 июн 2021 в 11:04
189 4 4 серебряных знака 17 17 бронзовых знаков
Самый простой способ — вложить эту модель в пустой объект и сместить немного вбок. А вращать уже родительский объект.
29 июн 2021 в 17:26
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Сменить позиционирование с Pivot на Center .

Отслеживать
ответ дан 29 июн 2021 в 12:43
Alemkhan Utepkaliev Alemkhan Utepkaliev
647 5 5 серебряных знаков 23 23 бронзовых знака
Если вы хотите задать вопрос, то вам следует написать комментарий, а если вы даете ответ, то подразумевается, что у вас есть вся информация для этого. По последнему вопросу очевидно, что вам информации недостаточно, вследтсвие этого вам, опять же, возможно, следует написать комментарий. Здесь вы можете прочитать о том, как дать хороший ответ
29 июн 2021 в 19:22
Только наоборот для меня сработало, спасибо за ответ)
29 июн 2021 в 19:49
@МаксимФисман, ответ был дан, после чего я уточнил автора использовалось ли данное решение. От этого вопроса, суть моего ответа не изменилась, я конкретно указал что и где нажимать в том числе и на скриншоте, я смог дать ответ который помог автору, и голосование против моего ответа это потенциально может не дать возможность другим найти решение схожей проблемы
30 июн 2021 в 13:44
Ну ответ-то только один, возможность никуда не пропадёт, а вот вопрос вы правильно удалили: его все же стоит задавать в комментариях. А уже потом писать ответ. После получения ответа на вопрос. А иначе, как видели уже было -2. Сейчас к ответу нет никаких претензий и я меняю голос против на голос за!
Unity3d как поменять направление Pivot осей.
Использую банальный скрипт для создания «пулек» используя свойство transform.forward
объекта, к которому привязан скрипт.
Читаю документацию что transform.forward это, то что надо чтобы указать направление силы.
Только вот эта ось (синяя) направлена не в ту сторону в которую нужно(и пули летят не в ту сторону), вот как её(эту ось)
повернуть не програмными ссредствами в нужную сторону.
Интернет говорит, что необходимо создавать некий промежуточный объект
с правильным направлением осей и вот его уже и использовать.
Наверня есть в Unity более простой способ.
Без пересоздания объектов, а просто поворотом осей?
Заранее извиняюсь за глупый вопрос.
- Dan Diamond
- Постоялец
#1
20:19, 10 июня 2012
Если я правильно понял задачу, есть несколько способов решения:
1. Самый простой. Создаем пустой GameObject, дочерним к нему делаем «снаряд» (Просто перетаскиваем «снаряд» на созданный пустой GameObject). Дальше поворачиваем дочерний «снаряд» так как необходимо.
2. Способ второй, несколько запарнее. Смотрим, куда направлены оси у объекта «снаряд» и в скрипте указываем вектор направления сообразно осям «снаряда». Ну, т.е. если у «снаряда» вперед смотрит ось , то соответственно и указываем transform.right как нужное направление. Ну или Quaternion.Euler (0f, 90f, 0f) * transform.forward (кватернион в этом случае будет указывать поворот вектора перемещения).
3. Способ третий. Работать с изменением mesh-а. Т.е. поворачивать все вертексы меша на определенный угол с помощью editor скрипта. Крайне не рекомендую.
4. Можно еще поискать готовый editor скрипт, который изменяет направление локальных осей объекта и положение пивота. Вроде народные умельцы создавали что-то подобное.
#2
23:29, 10 июня 2012
Спасибо.
Подошел первый способ, и даже без удочерения 🙂
Поворот и вращение объектов в Unity

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

И начнём данную статью с вращения, так как он более прост и понятен.
Вращение игрового объекта
Для начала разберём, что означает вращение? Вращение, это плавное изменение значений Transform.rotation, вокруг определённых осей. Вот их нам и нужно менять.
Для изменения этих значений, нам поможет метод Transform.Rotate. Работает он следующим образом:
void Update()
Этот скрипт будет вращать вашего персонажа по оси Z со скоростью 1. Вы так же можете выбрать другую ось вращения, например X или Y. Или же увеличить скорость вращения на 2.
void Update()
На этом всё! Как видите, вращать игровые объекты очень просто. Теперь перейдём к повороту, который по своей сути немного тяжелее.
Поворот игрового объекта
Поворот персонажа подразумевает его поворот на 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.
Если остались вопросы, пишите в комментариях. А так же ставьте лайки, если помог 🙂