Архитектура игрового мира на объектах и компонентах
В основе архитектуры Unity лежит компонентный подход. Каждая видимая или невидимая сущность на сцене — это базовый контейнер GameObject. Сам по себе этот контейнер пуст и хранит лишь координаты в трехмерном или двухмерном пространстве через обязательный компонент Transform. Свойства и поведение объекта определяются набором компонентов, которые разработчик на него прикрепляет.
Если объекту требуется отображение, к нему привязывают Mesh Filter для хранения трехмерной сетки и Mesh Renderer для расчета материалов и шейдеров. Для участия в физическом мире добавляются коллайдеры разной формы и компонент твердого тела Rigidbody. Программные сценарии на C# наследуются от базового класса MonoBehaviour и работают точно так же, выступая еще одним компонентом в списке объекта.
Главный игровой цикл движка
Любая интерактивная игра строится вокруг бесконечного цикла, который непрерывно опрашивает действия игрока, считает физические формулы, вызывает скрипты и отправляет кадр на видеокарту. В Unity этот процесс четко регламентирован и разбит на отдельные фазы со строгой очередностью вызова встроенных методов.
Инициализация и запуск скриптов
Когда объект появляется на сцене, движок обращается к методу Awake, где настраиваются внутренние ссылки и базовые переменные до активации остального окружения. Затем срабатывает метод OnEnable при переходе объекта в активный статус, а следом — метод Start, который вызывается один раз непосредственно перед первым расчетом кадра. Благодаря этому разработчик заранее подготавливает связи между объектами без риска обратиться к еще не созданной сущности.
Физический шаг FixedUpdate
Физическая симуляция в Unity отвязана от частоты отрисовки графики и работает с фиксированным временным шагом, который по умолчанию составляет 0.02 секунды, что соответствует пятидесяти вызовам в секунду. За это отвечает встроенный физический движок PhysX компании NVIDIA. Обработка сил, ускорений и импульсов твердых тел происходит строго внутри метода FixedUpdate. Если экран выдает сто двадцать кадров в секунду или внезапно зависает до пятнадцати, математика столкновений остается предсказуемой и стабильной.
Логический шаг Update и завершение кадра LateUpdate
Метод Update запускается каждый графический кадр, поэтому промежуток времени между вызовами постоянно колеблется. Здесь движок опрашивает клавиатуру, мышь или геймпад, меняет анимационные параметры и двигает вспомогательные объекты. Чтобы скорость персонажа в Update не зависела от мощности компьютера, любое смещение умножают на Time.deltaTime — длительность последнего кадра в секундах. После вызова всех Update запускается фаза LateUpdate, где обычно позиционируют игровую камеру, следующую за уже переместившимся персонажем.
Конвейер рендеринга и взаимодействие с видеокартой
После завершения математических расчетов движок готовит визуальную часть кадра для графического процессора. Этот процесс называется отрисовкой или рендерингом. Unity поддерживает несколько конвейеров графики, включая универсальный конвейер URP для оптимизации под мобильные телефоны и слабые ПК, а также конвейер высокой четкости HDRP для детализированных сцен с реалистичным освещением.
- Определение видимости через отсечение невидимой геометрии, находящейся вне пирамиды видимости виртуальной камеры или закрытой крупными стенами.
- Сортировка объектов по удаленности от камеры и типу материалов для минимизации переключения шейдерных программ в памяти видеочипа.
- Формирование вызовов отрисовки Draw Calls, передающих массивы полигонов, текстурные развертки и параметры света в графический API Vulkan, DirectX или Metal.
- Выполнение вершинных и фрагментных шейдеров на видеокарте для финального затемнения, наложения текстур и пост-эффектов вроде размытия движения.
Частые вопросы
Почему физику нельзя считать внутри обычного метода Update?
Частота вызова метода Update зависит от производительности видеокарты и текущей нагрузки на кадр. При неравномерных интервалах времени расчет формул ускорения и гравитации становится нестабильным, из-за чего быстро летящие объекты могут проваливаться сквозь стены или неестественно ускоряться.
Чем компонент Collider отличается от Rigidbody?
Коллайдер задает геометрическую форму границы объекта для обнаружения касаний, работая как невидимая оболочка. Компонент Rigidbody сообщает движку, что объект подчиняется законам массы, трения, гравитации и импульса.
На каком языке пишут логику в современных версиях Unity?
Единственным основным языком программирования в движке Unity выступает C#. Ранее поддерживался собственный диалект UnityScript, похожий на JavaScript, и диалект Boo на основе Python, но их поддержка полностью прекращена ради стабильности и производительности платформы.
Что происходит с объектом при отключении или уничтожении?
При временном отключении объекта движок вызывает метод OnDisable, останавливая выполнение циклических функций Update. При окончательном удалении объекта из оперативной памяти срабатывает событие OnDestroy, где скрипты отписываются от глобальных событий и освобождают занятые ресурсы.