GameObject и компоненты
GameObject и компоненты Игровой процесс и интерактивность в Unity создаются с помощью GameObject и компонентов. Это основные составляющие проекта Unity. Их можно создавать через интерфейс или с помощью скриптов. Все элементы в иерархии игры являются GameObject. По сути, GameObject представляют собой пустые контейнеры, которые сами по себе ничего не делают. Они могут обозначать в игре самые разные сущности: персонажа, элемент окружения, эффект частиц и многое другое.
Добавление компонента изменяет функциональность GameObject.
Чтобы GameObject стал функциональной частью игры, к нему нужно добавить специальные компоненты. Каждый GameObject может содержать несколько компонентов. Они часто работают совместно друг с другом или обмениваются данными с компонентами других GameObject.
В зависимости от требуемой функциональности к GameObject добавляют разные сочетания компонентов. С помощью скриптов можно создавать и собственные компоненты.
Inspector У компонентов может быть любое число редактируемых свойств, или переменных, значения которых изменяются в окне Inspector. Эти переменные также можно изменять из пользовательских скриптов.
В окне Inspector измените дальность, цвет и интенсивность источника света из примера.
Используйте Inspector для ввода и сброса значений. Значок Help обеспечивает быстрый доступ к документации, а функция Presets позволяет быстро сохранять и загружать значения. Через меню More Items можно менять порядок компонентов, а также копировать и вставлять значения.
Используйте меню Help, Preset и More Items для управления компонентами.
Компонент Transform У каждого GameObject в Unity есть компонент Transform, задающий его положение, поворот и масштаб. Удалить этот компонент нельзя. Для любого дочернего GameObject значения Transform в Inspector отображаются в локальных координатах относительно Transform родительского объекта. Масштаб Transform определяет размер меша в Unity относительно его размера в приложении для 3D-моделирования. Это важно для физического движка, который считает, что одна единица мирового пространства равна одному метру. Как и многие 3D-приложения, Unity внутренне представляет повороты кватернионами, но для удобства редактирования показывает в Inspector эквивалентные углы Эйлера.
Советы по работе с Transform - Перед добавлением дочернего объекта обнулите Transform родителя: задайте
позицию и/или поворот родительского Transform в (0, 0, 0), прежде чем сделать другой Transform дочерним. При изменении родительско-дочерних связей Unity компенсирует существующие значения, чтобы дочерний объект сохранил прежнее положение в мировом пространстве.
Если Transform родительского объекта сохраняет значения по умолчанию, локальные координаты дочернего объекта совпадут с глобальными. Это упрощает настройку. - Используйте правильный режим Tool/Pivot. При перемещении, вращении и
масштабировании следите за настройками инструментов на Toolbar. В Unity можно переключаться между режимами Pivot и Center: манипулятор Gizmo будет расположен соответственно в опорной точке модели или в центре выделения. Также учитывайте переключение между системами координат Local и Global.
Настройки инструментов
- Если объект должен находиться или стоять на полу, разместите его pivot у
основания, а не в центре. Это позволяет точно ставить персонажей и объекты на пол. В 3D-проекте так также удобнее работать в виде сверху на плоскости XZ. - Все меши должны быть ориентированы в одном направлении. Это касается
мешей персонажей и других объектов, у которых есть направление вперёд. Единообразие значительно упрощает многие вычисления во время выполнения.
- Сразу задайте правильный масштаб. Создавайте ресурсы так, чтобы
все они импортировались с коэффициентом масштаба 1 и значением 1 по осям масштаба X, Y и Z. Сверяйте масштаб с кубом (GameObject > 3D Object > Cube).
Если масштабирование необходимо, избегайте неоднородного масштаба корневого Transform. Иначе при добавлении дочерних Transform возможны неожиданные результаты. - Если для симуляции физики используются компоненты Rigidbody, моделируйте из расчёта 1 единица = 1 метр. В противном случае скорректируйте масштаб с помощью
параметра Mesh Scale Factor в Import Settings модели. Крупные объекты кажутся падающими в замедленном темпе, поскольку скорость воспринимается относительно: при одинаковой скорости в мировых единицах движение мыши и слона выглядит по-разному из-за различий в размерах их тел.
Симуляция физики может быть корректной, даже если воспринимаемая скорость кажется неверной. Подробнее о влиянии масштаба меша на физику см. на справочной странице компонента Rigidbody.
Встроенные компоненты Добавляйте компоненты к выбранному GameObject через меню Components. Например,
если добавить Rigidbody (Add Component > Physics > Rigidbody) к
3D-кубу, его свойства появятся в Inspector.
Добавляйте встроенные компоненты, чтобы расширять функциональность GameObject (в этом примере - Rigidbody).
Нажмите Play, пока пустой GameObject всё ещё выбран: физический движок Unity заставит его падать под действием силы тяжести. Компонент Rigidbody наделил прежде пустой GameObject функциональностью. Комбинации компонентов позволяют создавать уникальный игровой процесс. Встроенные компоненты предоставляют звук, рендеринг, навигацию ИИ и другие возможности. По мере дальнейшего знакомства с Editor вы откроете ещё больше функций.
Пользовательские компоненты Хотя встроенные компоненты добавляют GameObject множество возможностей, вам неизбежно потребуется реализовывать собственное поведение с помощью Unity Scripting API. Пользовательские скриптовые компоненты могут вызывать игровые события, проверять столкновения, применять физику, реагировать на пользовательский ввод и делать многое другое. Когда вы создаёте скрипт и прикрепляете его к GameObject, он появляется в Inspector этого GameObject как встроенный компонент. Во время проверки игрового дизайна в Editor его значения можно настраивать. После сохранения и компиляции в проекте скрипты становятся компонентами.
Пример пользовательского скриптового компонента
Скрипты, прикреплённые к GameObject, наследуются от встроенного класса MonoBehaviour. Взаимодействие MonoBehaviour друг с другом лежит в основе игрового процесса в Unity. Unity Scripting API подробно описывает все классы, доступные в UnityEngine и UnityEditor. Рекомендуем сначала ознакомиться с руководством, а затем переходить к более глубокому изучению.