Преобразования
Компонент Transform хранит Позиция, Ротация, Масштаб и состояние родительской связи объекта GameObject. К объекту GameObject всегда прикреплён компонент Transform: удалить Transform или создать GameObject без компонента Transform невозможно.
Компонент Transform
Компонент Transform определяет Положение, Вращениеи Масштаб каждого GameObject в сцене. Каждый GameObject имеет Transform.
Совет: Вы можете изменить цвета осей Transform (и других элементов UI) (Меню: Unity > Настройки и затем выберите панель Цвета и ключи).
Свойства
| Свойство: | Функция: |
|---|---|
| Позиция | Положение Transform в координатах x, y и z. |
| Ротация | Вращение Transform вокруг осей x, y и z, измеряемое в градусах. |
| Масштаб | Масштаб Transform вдоль осей x, y и z. Значение “1” означает первоначальный размер (размер, в котором вы импортировали GameObject). |
| Включить ограниченные пропорции | Заставляет масштаб сохранять текущие пропорции, так что изменение одной оси изменяет другие две оси. По умолчанию отключено. |
Unity измеряет Положение, Вращение и Масштаб значения Transform относительно родителя Transform. Если Transform не имеет родителя, Unity измеряет свойства в мировом пространстве.
Редактирование преобразований
В пространстве 2D вы можете манипулировать преобразованиями только по оси x или только по оси y. В пространстве 3D вы можете манипулировать преобразованиями по оси x, оси y и оси z. В Unity эти оси представлены красным, зеленым и синим цветами соответственно.
Существует три основных способа изменения свойств Transform:
- В представлении Scene.
- В окне Inspector.
- В ваших C# сценариях.
Scene вид
В представлении Scene для изменения преобразований можно использовать инструменты Перемещение, Поворот и Масштабирование. Эти инструменты расположены в верхнем левом углу представления Unity Editor.
Вы можете использовать Transform инструменты на любом GameObject в сцене. Когда вы выбираете GameObject, инструмент Гизмо Внешний вид гаджета зависит от того, какой инструмент вы выберете.
Когда вы нажимаете и перетаскиваете по одной из трех осей Gizmo, цвет оси меняется на желтый. Пока вы перетаскиваете мышь, GameObject перемещается, вращается или масштабируется вдоль выбранной оси. Когда вы отпускаете кнопку мыши, ось остается выбранной
При перемещении GameObject вы можете заблокировать движение на определенной плоскости (то есть изменить две оси и оставить третью неизменной). Чтобы активировать блокировку для каждой плоскости, выберите три маленьких цветных квадрата вокруг центра Gizmo. Цвета соответствуют оси, которая блокируется при выборе квадрата (например, выберите синий квадрат, чтобы заблокировать ось z).
Окно Inspector
В окне Inspector вы можете использовать компонент Transform для редактирования свойств Transform выбранного GameObject. Существует два способа редактирования значений свойств Transform в компоненте:
- Введите значения в поля значений свойств вручную. Это полезно для очень специфических настроек.
- Щелкните поле значения и перетащите вверх или вниз, чтобы увеличить или уменьшить значение. Это полезно для менее специфических настроек.
Из кода
Используйте Transform класс в своём коде C#, чтобы менять положение, поворот и масштаб GameObject, а также его иерархические связи с родительскими и дочерними объектами.
Для полной справки о каждом члене Transform классе и примеры использования см. в Transform Ссылка API.
Группа GameObjects
В Unity вы можете группировать GameObjects в иерархии родитель-дочерний:
- У родительского GameObject есть другие GameObjects, подключенные к нему, которые принимают его Transform свойства.
- Ребенок GameObject подключен к другому GameObject, и принимает на себя это GameObject’s Transform свойства.
В течение Hierarchy окно, ребенок GameObjects появляются непосредственно под родителем GameObjects Вы можете выбрать значок раскрывающегося списка, чтобы скрыть или показать родительскую строку, или выбрать значок раскрывающегося списка, чтобы GameObjectребенок GameObjects.
Детёныш GameObject перемещается, вращаясь и масштабируясь точно так же, как и его родитель. Детёныш GameObjects также может иметь собственного детенка GameObjects. GameObject может иметь нескольких детей GameObjects, но только одного родителя GameObject.
Эти многочисленные уровни родительско-детских отношений между GameObjects форма a Transform иерархии. GameObject на вершине иерархии (т.е. единственный GameObject в иерархии, которая не имеет родителя) известен как корень GameObject.
Чтобы создать родительское GameObject, перетащите любое GameObject в окне Hierarchy на другое. Это создает взаимоотношение родитель-ребенок между двумя GameObjects.
Редактирование преобразований для родительского и дочернего GameObjects
Вы можете группировать GameObjects в иерархии родитель-ребёнок.
Значения Transform дочернего GameObject отображаются относительно значений Transform родительского GameObject. Эти значения называются локальными координатами. При построении Scene для дочерних GameObjects обычно достаточно работать с локальными координатами. Во время игры часто полезно узнать их глобальные координаты или точную позицию в мировом пространстве. API скриптов компонента Transform имеет отдельные свойства для локальных и глобальных Позиция, Ротация и Масштаб, а также позволяет преобразовывать локальные координаты в глобальные и обратно.
Тип: При создании родительского преобразования полезно установить местоположение родительского преобразования в <0,0,0> перед добавлением дочернего преобразования Transform. Это означает, что локальные координаты для ребенка Transform координаты будут совпадать с глобальными координатами, что облегчает обеспечение того, чтобы ребенок Transform в правильном положении.
Преобразования и масштабирование
Параметр Масштаб компонента Transform определяет разницу между размером меша в приложении для моделирования и размером этого меша в Unity. Размер меша в Unity (и, следовательно, Масштаб компонента Transform) особенно важен при физическом моделировании. По умолчанию физический движок предполагает, что одна единица в мировом пространстве соответствует одному метру. Если GameObject очень велик, может казаться, что он падает «как в замедленной съёмке»; на самом деле симуляция верна, поскольку вы наблюдаете, как очень большой GameObject падает с большой высоты.
Три фактора влияют на Масштаб вашего GameObject:
- Размер сетки в вашем 3D приложении для моделирования.
- Параметр Mesh Scale Factor в разделе Параметры импорта объекта GameObject.
- Значения Масштаб вашего Компонента Transform.
Не настраивайте масштаб Масштаб вашей GameObject в компоненте Transform. Если вы создаете модели в реальном масштабе, вам не придется менять масштаб МасштабTransform. Вы также можете настроить масштаб, в котором импортируется сетка, поскольку некоторые оптимизации происходят в зависимости от размера импорта. Сделайте это в параметрах импорта Настройки импорта для вашей индивидуальной сетки. Создание экземпляра GameObject, имеющего настроенное значение масштаба Масштаб, может уменьшить производительность.
Никогда не устанавливайте ось Масштаб на 0 в компоненте Transform. Это может привести к неопределенным результатам для математических расчетов, таким как значения NaN (не число) в отображении, что приводит к неправильным графическим артефактам на экране.
Изменение Масштаба Масштаб влияет на позицию дочерних Преобразований. Например, масштабирование родительского Transform на (0,0,0) ставит все дочерние Преобразования в положение (0,0,0) относительно родительского Transform.
Неоднородный масштаб
Неравномерное масштабирование — это когда у Scale в Transform разные значения по x, y и z, например (2, 4, 2). При равномерном масштабировании значения по x, y и z одинаковы, например (3, 3, 3). Неравномерное масштабирование бывает полезно в отдельных случаях, но ведёт себя иначе, чем равномерное:
- Некоторые компоненты не полностью поддерживают неоднородное масштабирование. Например, некоторые компоненты имеют круглый или сферический элемент, определенный свойством Радиус, например Sphere Collider, Capsule Collider, Light и Audio Source. Это означает, что круглая форма остается круглой при неоднородном масштабировании, а не эллиптической.
- Если дочерняя фигура GameObject имеет родительскую фигуру GameObject с неравномерным масштабированием и поворачивается относительно родительской фигуры GameObject, то она может выглядеть наклоненной или «срезанной». Существуют компоненты, которые поддерживают простое неравномерное масштабирование, но не работают правильно, когда они наклонены таким образом. Например, наклоненная Box Collider не соответствует точно форме отображаемой сетки.
- Для дочернего объекта GameObject родительского объекта GameObject с неодинаковым масштабом масштаб автоматически не обновляется при его вращении. В результате форма дочернего объекта GameObject может внезапно измениться при обновлении масштаба, например, если дочерний объект GameObject отделяется от родительского объекта GameObject.
Дополнительные ресурсы
Transform