Упаковка игры и обзор мультиплеера
Урок про то, как превратить проект в готовую игру, и обзорный взгляд на сетевой мультиплеер.
Упаковка (Packaging) — это процесс сборки проекта в самостоятельное приложение под конкретную платформу, которое можно запустить без редактора.
От проекта к игре
В редакторе вы тестируете игру кнопкой Play, но игроку нужен готовый исполняемый файл. Упаковка собирает код, ассеты и движок в дистрибутив под выбранную платформу (Windows, консоль, мобильное устройство).
Этапы упаковки
- Выберите платформу: Platforms → Windows (или другая).
- Укажите конфигурацию: Development (с отладкой) или Shipping (финальная, быстрая).
- Запустите Package Project.
- Движок скомпилирует код, «приготовит» (cook) ассеты в формат платформы и соберёт билд.
| Конфигурация | Когда использовать |
| Development | Тестирование вне редактора, с логами |
| Shipping | Финальный релиз: быстрее, без отладочных средств |
Key-шаг — cooking: ассеты конвертируются в оптимизированный для платформы вид (например, текстуры сжимаются под конкретное железо), а неиспользуемые исключаются.
Обзор мультиплеера
Сетевая игра в Unreal построена на модели «клиент-сервер». Есть авторитетный сервер, хранящий «истину» о состоянии игры, и клиенты, которые отображают её и шлют свои действия. Это защищает от читерства: клиент не решает сам, попал ли он, — это решает сервер.
Репликация и authority
Чтобы данные с сервера попадали к клиентам, их помечают как реплицируемые. Сервер меняет значение — оно автоматически синхронизируется с клиентами. Понятие authority означает: только сторона с полномочиями (обычно сервер) имеет право менять состояние.
Клиент жмёт "выстрел"
| (RPC на сервер)
Сервер: проверяет, считает попадание (authority)
| (репликация результата)
Все клиенты: видят эффект выстрела и уронКак работает под капотом
Реплицируемые переменные сервер рассылает клиентам при изменении. Действия игрока передаются на сервер через RPC (Remote Procedure Call) — удалённый вызов функции. Сервер проверяет действие и реплицирует результат всем. Эта архитектура — причина, по которой важно правильно разделять GameMode (сервер) и GameState (всем): мы заложили её ещё в уроках про каркас игры.
Частые ошибки
- Тестировать только в редакторе. Упакованный билд может вести себя иначе; проверяйте сборку.
- Доверять клиенту в мультиплеере. Решения о попаданиях и уроне должен принимать сервер.
- Забыть пометить переменную реплицируемой. Тогда клиенты не увидят изменений.
Подготовка к релизу
Перед упаковкой финального билда стоит пройти чек-лист. Уберите отладочные выводы и тестовые объекты с уровней. Проверьте, что игра запускается с правильного стартового уровня — он задаётся в Project Settings. Настройте иконку и название приложения. Соберите билд в конфигурации Shipping и обязательно протестируйте именно его, а не редактор: в упакованной игре нет редакторских костылей, и иногда всплывают проблемы, незаметные при Play в редакторе. Частая засада — ассет, который грузился в редакторе, но не попал в cook из-за того, что на него ссылались лишь косвенно.
Для мультиплеера к этому добавляется тестирование с несколькими экземплярами. Редактор умеет запускать сразу несколько клиентов (Number of Players в настройках Play), имитируя сетевую игру локально. Так проверяют репликацию: то, что видит сервер, должны корректно видеть и клиенты. Сетевые баги коварны — они проявляются только при нескольких участниках, поэтому тестировать мультиплеер в одиночку бессмысленно.
Итоги
- Упаковка собирает игру в самостоятельный билд под платформу.
- Cooking конвертирует ассеты под целевое железо; Shipping — финальная конфигурация.
- Мультиплеер построен на авторитетном сервере и клиентах.
- Репликация синхронизирует данные, RPC передаёт действия; authority у сервера.