Unity закрывает почти весь путь от пустой сцены до файла, который принимает магазин приложений: редактор, физика, свет, звук, интерфейс и сборка под каждую платформу. Разбираем, из чего состоит проект на этом движке, как пишется код и что настраивать перед выпуском.

Готовый набор инструментов: сцена, рендер, физика, звук и сборка в один исполняемый файл.
Unity это игровой движок, то есть среда, где сцена собирается мышкой, а поведение объектов дописывается кодом. Всё, что обычно пришлось бы писать самому, уже внутри: отрисовка кадра, расчёт столкновений, воспроизведение звука, чтение нажатий, работа с файлами, сборка проекта под конкретное устройство.
Движок берёт на себя различия платформ. Один и тот же проект превращается в apk для Android, в архив для App Store, в страницу на WebGL или в исполняемый файл для ПК, причём код при этом почти не меняется.

Иерархия, сцена, инспектор, проект и консоль. Остальное настраивается под себя.
Первое, что видит новый человек в Unity, это набор окон. Их можно двигать и сохранять раскладку, но смысл каждого не меняется.
Пустышка плюс набор компонентов даёт и врага, и кнопку, и источник света.
В сцене нет отдельных классов «враг» или «пуля». Есть GameObject, сам по себе пустой, и компоненты, которые к нему привинчены. Меш придаёт форму, коллайдер границы, Rigidbody вес и падение, ваш скрипт поведение. Меняя набор компонентов, из одной заготовки получают что угодно.
Настроенный объект сохраняют в файл и дальше ставят в сцену копиями. Правка оригинала расходится по всем копиям сразу: поменяли скорость у префаба врага, и она поменялась у сорока врагов на пяти уровнях. Отдельной копии при этом можно задать своё значение, оно переопределит общее.

Методы вызываются движком в строгом порядке, и порядок надо знать.
Скрипт наследуется от MonoBehaviour и вешается на объект как ещё один компонент. Движок сам зовёт нужные методы: один раз при создании, дальше каждый кадр, отдельно для физики.
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
[SerializeField] private float speed = 5f; // поле видно в инспекторе
private Rigidbody body;
private void Awake()
{
body = GetComponent<Rigidbody>();
}
private void Update()
{
// ввод читаем в кадре, чтобы не пропустить нажатие
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
moveInput = new Vector3(x, 0f, z);
}
private void FixedUpdate()
{
// физику двигаем с постоянным шагом
body.MovePosition(body.position + moveInput * speed * Time.fixedDeltaTime);
}
private Vector3 moveInput;
}
Rigidbody, коллайдеры, триггеры и слои: четыре вещи, которые решают почти всё.
Тело с Rigidbody падает, толкается и отскакивает само. Форму для расчёта задаёт коллайдер, и это отдельная от модели геометрия: простой ящик считается в разы быстрее, чем точная копия меша.
private void OnTriggerEnter(Collider other)
{
if (!other.CompareTag("Player")) return; // сравнение тегом дешевле поиска компонента
inventory.Add(itemId);
Destroy(gameObject);
}
URP для мобильных, HDRP для тяжёлых сцен, встроенный конвейер для старых проектов.
Первое решение в новом проекте это конвейер рендера. Поменять его на середине производства дорого: материалы и шейдеры придётся переделывать.
| Конвейер | Для чего | Чем платите |
|---|---|---|
| URP | мобильные, WebGL, простая стилизованная графика | нет части тяжёлых эффектов |
| HDRP | ПК и консоли, фотореализм, сложный свет | высокие требования к железу |
| Built-in | старые проекты и обучающие материалы | развитие остановлено |
Динамический свет считается каждый кадр и стоит дорого. Неподвижные лампы и солнце запекают в текстуры заранее: сцена выглядит так же, а на телефоне выигрывает десятки кадров. Правило простое: движется только то, что действительно должно двигаться.

Canvas, якоря и масштаб: как не сломать вёрстку на планшете и вырезе камеры.
Интерфейс живёт на объекте Canvas и подчиняется якорям: элемент цепляется к краю, центру или растягивается. Сцена, собранная под один экран без якорей, разъезжается на первом же устройстве с другим соотношением сторон.
Один проект, разные требования магазинов и железа.
Сборка делается из окна Build Settings: выбирается платформа, сцены, ключи подписи и формат файла. Дальше начинаются различия, о которых лучше знать заранее.
Шестнадцать миллисекунд на кадр, и их надо на что-то потратить.
Шестьдесят кадров в секунду означают, что на весь кадр есть примерно 16 миллисекунд: отрисовка, физика, скрипты, интерфейс. Профайлер показывает, кто именно съел время, и работать надо с ним, а не с догадками.
| Что смотрим | Норма для мобильной игры | Чем лечится |
|---|---|---|
| Вызовы отрисовки | до нескольких сотен за кадр | атласы текстур, общий материал, статический батчинг |
| Треугольники в кадре | сотни тысяч, не миллионы | LOD, упрощённые модели, отсечение невидимого |
| Мусор в памяти | ноль выделений в Update | пул объектов вместо Instantiate и Destroy |
| Разрешение текстур | по месту на экране, не по исходнику | сжатие под платформу, mip-уровни |
Экономит недели на инструментах и подводит на графике.
В магазине ассетов есть и редакторы диалогов, и системы сохранений, и целые наборы моделей. Инструменты брать почти всегда выгодно: они экономят недели и не видны игроку. С визуальным контентом сложнее, покупные пачки узнаются с первого взгляда, потому что стоят в сотнях других игр.
Бесплатной версии хватает дольше, чем кажется.
Персональная лицензия бесплатна, пока годовая выручка проекта не перевалила за двести тысяч долларов. Дальше нужна платная подписка на каждое рабочее место. Условия движок пересматривал не раз, поэтому перед подписанием договора с заказчиком актуальные цифры стоит перечитать на сайте.
Все пять встречаются на проектах любого размера и стоят недель работы.