info@app-android.ru

Скопировать

+7 (499) 677-64-37

Скопировать

Разработка игр на Unity

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

C# и MonoBehaviourAndroid, iOS, WebGL11 разделов11.09.2026
Рабочее место разработчика: сцена Unity на мониторе
C#
единственный язык скриптов в современном Unity
20+
платформ сборки из одного проекта
60 FPS
цель для мобильной игры, это 16 мс на кадр
200 тыс. $
порог выручки, до которого хватает бесплатной лицензии
01

Что такое Unity

Готовый набор инструментов: сцена, рендер, физика, звук и сборка в один исполняемый файл.

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

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

Мобильные игры
Основная доля проектов: казуальные, гиперказуальные, мидкор с долгой поддержкой
VR и AR
Готовые модули под очки и трекинг, реальность на телефоне без своей математики
Реклама и промо
Интерактивные ролики, playable ads, презентации продукта в 3D
Неигровые проекты
Тренажёры, симуляторы оборудования, визуализация архитектуры
Сцена в редакторе Unity: серый прототип уровня
Сцена в редакторе Unity: серый прототип уровня
02

Редактор: пять окон, в которых проходит работа

Иерархия, сцена, инспектор, проект и консоль. Остальное настраивается под себя.

Первое, что видит новый человек в Unity, это набор окон. Их можно двигать и сохранять раскладку, но смысл каждого не меняется.

Иерархия
Список всех объектов текущей сцены. Вложенность показывает, кто к кому прикреплён: колесо к машине, кнопка к панели
Сцена и Game
В первом окне вы расставляете объекты руками, во втором смотрите на мир глазами игровой камеры
Инспектор
Свойства выделенного объекта: позиция, компоненты, ссылки на другие объекты, поля ваших скриптов
Проект
Файлы на диске: модели, текстуры, звуки, префабы, сцены, скрипты
Консоль
Ошибки, предупреждения и всё, что вы вывели из кода. Первое место, куда смотреть, когда что-то не работает
03

Объекты, компоненты и префабы

Пустышка плюс набор компонентов даёт и врага, и кнопку, и источник света.

В сцене нет отдельных классов «враг» или «пуля». Есть GameObject, сам по себе пустой, и компоненты, которые к нему привинчены. Меш придаёт форму, коллайдер границы, Rigidbody вес и падение, ваш скрипт поведение. Меняя набор компонентов, из одной заготовки получают что угодно.

Префаб: заготовка, у которой есть оригинал

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

  1. 01 Собрать объект Модель, коллайдер, скрипт, звук
  2. 02 Сохранить как префаб Файл появляется в папке проекта
  3. 03 Расставить копии Перетаскиванием или из кода
  4. 04 Править оригинал Изменения уходят во все копии
Иерархия объектов и префабы в проекте
Иерархия объектов и префабы в проекте
04

Код на C#: жизненный цикл скрипта

Методы вызываются движком в строгом порядке, и порядок надо знать.

Скрипт наследуется от MonoBehaviour и вешается на объект как ещё один компонент. Движок сам зовёт нужные методы: один раз при создании, дальше каждый кадр, отдельно для физики.

Awakeобъект создан, ищем ссылки внутри себя
Startперед первым кадром, когда все объекты уже живы
Updateкаждый кадр: ввод, таймеры, логика
FixedUpdateс постоянным шагом: всё, что про физику
OnDestroyобъект удаляют, отписываемся от событий
PlayerMove.csC#
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;
}
05

Физика и столкновения

Rigidbody, коллайдеры, триггеры и слои: четыре вещи, которые решают почти всё.

Тело с Rigidbody падает, толкается и отскакивает само. Форму для расчёта задаёт коллайдер, и это отдельная от модели геометрия: простой ящик считается в разы быстрее, чем точная копия меша.

Rigidbody
Масса, гравитация, сопротивление. Есть kinematic режим, когда объект двигают только кодом
Коллайдер
Ящик, сфера, капсула или меш. Первые три дешёвые, последний берут в крайнем случае
Триггер
Коллайдер без отбрасывания: зона подбора предмета, вход в комнату, конец уровня
Слои
Матрица столкновений: пули игрока не задевают игрока, декор не мешает никому
Pickup.csC#
private void OnTriggerEnter(Collider other)
{
    if (!other.CompareTag("Player")) return;   // сравнение тегом дешевле поиска компонента

    inventory.Add(itemId);
    Destroy(gameObject);
}
06

Графика: конвейер рендера, материалы и свет

URP для мобильных, HDRP для тяжёлых сцен, встроенный конвейер для старых проектов.

Первое решение в новом проекте это конвейер рендера. Поменять его на середине производства дорого: материалы и шейдеры придётся переделывать.

КонвейерДля чегоЧем платите
URPмобильные, WebGL, простая стилизованная графиканет части тяжёлых эффектов
HDRPПК и консоли, фотореализм, сложный светвысокие требования к железу
Built-inстарые проекты и обучающие материалыразвитие остановлено

Свет: запекание против расчёта на лету

Динамический свет считается каждый кадр и стоит дорого. Неподвижные лампы и солнце запекают в текстуры заранее: сцена выглядит так же, а на телефоне выигрывает десятки кадров. Правило простое: движется только то, что действительно должно двигаться.

Сцена до и после запекания света
Сцена до и после запекания света
07

Интерфейс под любые экраны

Canvas, якоря и масштаб: как не сломать вёрстку на планшете и вырезе камеры.

Интерфейс живёт на объекте Canvas и подчиняется якорям: элемент цепляется к краю, центру или растягивается. Сцена, собранная под один экран без якорей, разъезжается на первом же устройстве с другим соотношением сторон.

Что проверить до сборки
  • Кнопки прижаты к своим краям якорями, а не поставлены по координатам
  • Режим масштабирования Canvas выставлен на разрешение, а не на пиксели
  • Безопасная зона учтена: вырез камеры и полоса жестов не перекрывают управление
  • Мелкий шрифт проверен на пятидюймовом телефоне, а не на одном мониторе
  • Ландшафт и портрет проверены, если игра допускает оба
08

Сборки под платформы

Один проект, разные требования магазинов и железа.

Сборка делается из окна Build Settings: выбирается платформа, сцены, ключи подписи и формат файла. Дальше начинаются различия, о которых лучше знать заранее.

Android
Формат AAB для Google Play, обязательная 64-битная сборка, свой ключ подписи, который нельзя терять
iOS
Unity отдаёт проект Xcode, дальше сборка и подпись на macOS, профили и сертификаты Apple
WebGL
Жёсткий лимит памяти и долгая первая загрузка, часть плагинов не работает
ПК и консоли
Свободнее по ресурсам, но консоли требуют сертификации и партнёрского доступа
09

Оптимизация: бюджет кадра и профайлер

Шестнадцать миллисекунд на кадр, и их надо на что-то потратить.

Шестьдесят кадров в секунду означают, что на весь кадр есть примерно 16 миллисекунд: отрисовка, физика, скрипты, интерфейс. Профайлер показывает, кто именно съел время, и работать надо с ним, а не с догадками.

Что смотримНорма для мобильной игрыЧем лечится
Вызовы отрисовкидо нескольких сотен за кадратласы текстур, общий материал, статический батчинг
Треугольники в кадресотни тысяч, не миллионыLOD, упрощённые модели, отсечение невидимого
Мусор в памятиноль выделений в Updateпул объектов вместо Instantiate и Destroy
Разрешение текстурпо месту на экране, не по исходникусжатие под платформу, mip-уровни
10

Asset Store: когда брать готовое

Экономит недели на инструментах и подводит на графике.

В магазине ассетов есть и редакторы диалогов, и системы сохранений, и целые наборы моделей. Инструменты брать почти всегда выгодно: они экономят недели и не видны игроку. С визуальным контентом сложнее, покупные пачки узнаются с первого взгляда, потому что стоят в сотнях других игр.

Берём смело
Редакторы, профайлеры, системы ввода, локализация, шейдерные наборы
Берём осторожно
Модели и окружение: проверяйте лицензию и переделывайте материалы под свой стиль
Не берём
Готовые шаблоны игр целиком: чужая архитектура связывает руки уже через месяц
Читаем лицензию
Некоторые ассеты нельзя использовать в проектах с внутриигровыми покупками или в VR
11

Лицензии и стоимость

Бесплатной версии хватает дольше, чем кажется.

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

Что учесть в смете проекта
  • Подписки на рабочие места команды, а не одна на студию
  • Платные сервисы движка: облачная сборка, аналитика, реклама
  • Лицензии на купленные ассеты, если проект коммерческий
  • Взносы магазинов: разовый у Google, годовой у Apple

Пять ошибок, которые дорого обходятся

Все пять встречаются на проектах любого размера и стоят недель работы.

01
Всё в одной сцене
Уровни, меню и настройки в одном файле означают конфликты при слиянии и минуты на открытие. Сцены дробят, общее выносят в аддитивную загрузку.
02
Поиск объектов по имени
GameObject.Find в Update перебирает всю сцену каждый кадр. Ссылки раздают через инспектор или собирают один раз при старте.
03
Instantiate и Destroy в бою
Создание и удаление пуль на лету плодит мусор и рывки. Пул объектов: заранее создали, включаем и выключаем.
04
Текстуры как есть из редактора
Исходники 4К в мобильной сборке раздувают вес и память. Сжатие настраивается по платформам в импорте.
05
Проверка только в редакторе
Редактор мощнее телефона и прощает то, что на устройстве вылетает. Сборка на реальном железе нужна с первых недель.

Главное

  • Unity даёт готовый конвейер: сцена, рендер, физика, звук, интерфейс и сборка под два десятка платформ из одного проекта.
  • Основа проекта это объекты с компонентами и префабы. Правка префаба расходится по всем копиям сразу.
  • Код пишут на C#: ввод читают в Update, физику двигают в FixedUpdate, ссылки собирают в Awake.
  • Конвейер рендера выбирают в начале: URP для мобильных, HDRP для тяжёлых сцен на ПК.
  • Бюджет кадра 16 миллисекунд, и проверять его нужно профайлером на реальном устройстве, а не в редакторе.