Приветствую всех друзья! В прошлой статье мы подробно разобрались в префабах и работе с ними. Сегодня мы поговорим о главном компоненте в Unity - Tansform.
Компонент Transform используется для хранения позиции, вращения, размера и информации о родителях и детях игрового объекта. Игровой объект всегда имеет на себе компонент Transform, его невозможно убрать, также невозможно создать игровой объект без этого компонента.
Редактирование трансформаций.
Для манипуляций с трансформациями в 3D пространстве используется координатная сетка по трем осям: X, Y и Z. Для 2D пространства используются только первые две координаты. В Unity эти оси представлены цветами: красный, зеленый и синий соответственно.
Трансформации можно редактировать как в окне сцены, так и в окне инспектора редактируя его свойства. В окне сцены редактировать трансформации можно используя инструменты из панели инструментов, о них я писал в одной из своих прошлых статей, когда обозревал интерфейс Unity. Эти инструменты расположены в верхнем левом углу редактора Unity. Их можно использовать на любом игровом объекте сцены. При выделении игрового объекта на сцене вы увидите гизмо отображающее выбранный инструмент трансформирования. Внешний вид гизмо будет зависеть от выбранного инструмента трансформирования.
При нажатии на одну из трех осей гизмо, вы заметите что она поменяет цвет на жёлтый. При перетаскивании мыши вы увидите, как игровой объект перемещается, вращается или изменяет размер вдоль выбранной оси. Когда вы отпустите кнопку мыши, ось останется выбранной.
Существует также дополнительная опция в режиме перемещения объекта зафиксировать его в определенной плоскости и двигать по двум координатам одновременно. Для этого служат 3 маленьких плоскости у основания осей (инструмент Translate на рисунке выше). Цвета соответствуют оси, которая будет заблокирована при нажатии на квадрат. Например, при нажатии на синий квадрат будет заблокировано движение по оси Z.
Родительство - это одна из основных концепций в Unity, которую важно понимать, чтобы успешно пользоваться редактором. Когда игровой объект является родительским, и в нем есть другие игровые объекты (они по отношению к родительскому будут дочерними), то все трансформации, которые происходят с родительским объектом, также будут влиять и на дочерние. Можно представить себе родительство, как если бы вы сидели в машине которая движется, вы в этот момент двигаетесь вместе с ней, но при этом сами вы внутри нее остаетесь на месте. Дочерние объекты также могут иметь своих детей, и так далее. У любого игрового объекта может быть несколько дочерних объектов и только один родитель. Эти многочисленные отношения образуют иерархию преобразований. Игровой объект на самом верху такой иерархии известен как корень.
Вы можете создать родительско-дочерние отношения между двумя игровыми объектами перетащив один игровой объект на другой в окне иерархии.
Еще хочется упомянуть о таком понятии как неравномерное масштабирование – это когда по трем осям разное значение масштаба (например 2, 4, 2). Напротив, равномерное масштабирование — это одинаковое значение по осям X, Y, Z (например 3,3,3). Так вот при неравномерном масштабировании могут возникать странности, которых нет при равномерном:
- Некоторые компоненты не полностью поддерживают неравномерное масштабирование, например, сферический коллайдер.
- Когда дочерний объект имеет неравномерно отмасштабированного родителя и вращается относительно этого родителя, он может выглядеть перекошенным или срезанным.
- По соображениям производительности дочерний объект неравномерно отмасштабированного родительского объекта не будет автоматически обновляться при его вращении.
Масштабирование определяет разницу между размером сетки в приложении для моделирования и размером сетки в Unity. Размер сетки очень важен для работы физического движка. Об этом я больше расскажу в своих будущих статьях.
В Unity есть три фактора которые могут повлиять на размер объекта:
1. Это изначально заданный размер в программе моделирования
2. Коэффициент размера модели, который настраивается при импорте модели
3. Размер, который мы задаем в компоненте Transform
В идеале нужно создавать модели с учетом их масштаба в вашей игре. Вторым приемлемым способом является изменение коэффициента размера при импорте модели в Unity. Самым нежелательным является изменение размера в компоненте Transform. Вы спросите почему эти способы идут в порядке желательном для изменений? Дело в том, что изменение размера на этапе моделирования никак не влияет на производительность, изменяя размер при импорте мы уже немного портим производительность будущей игры, и совсем плохо на нее влияет изменение размера через компонент Transform. Таковы особенности Unity, о которых следует знать.
В конце я бы хотел дать несколько советов по работе с компонентом Transform:
1. Перед тем как добавлять игровому объекту дочерний объект полезно выставить его в координаты (0,0,0). Это гарантирует что локальные координаты ребенка будут совпадать с глобальными координатами, что позволит вам быть уверенным, что ребенок находится в правильном положении.
2. Если вы используете компонент RigidBody (о котором я еще расскажу в будущих статьях), который моделирует физическое поведение твердых тел, важно понимать, что в этом моделировании размер модели очень важен – он влияет на физическое поведение.
3. Если есть желание, то можно изменить цвета осей преобразования. Для этого в контекстном меню выберите Edit\Preferences, а в открывшемся окне перейдите на вкладку Colors.
4. Изменение масштаба родительского объекта влияет на положение дочерних объектов. Например при изменении размера родительского объекта в 0, позиция всех дочерних объектов станет (0,0,0).
На сегодня это все. В следующей статье мы рассмотрим слои в Unity, что это такое и как с ними работать. Спасибо всем, кто дочитал эту статью до конца, подписывайтесь на канал, ставьте лайки, а для тех, у кого появились вопросы - спрашивайте в комментариях! А если вы хотите помочь данному каналу в развитии – делитесь этой статьей с друзьями в социальных сетях!