Unity 6.3
0 онлайн 55 гостей 3 в системе
Вход
Введение в сетевое взаимодействие многопользовательских игр Глава 8 из 11 Оригинал, стр. 72

Тестирование и отладка сетевых игр

Тестирование и отладка сетевых игр

Тестирование и отладка многопользовательских игр отличаются от работы с однопользовательскими проектами. Учитывайте основные этапы рабочего процесса сетевого проекта:

- При локальном тестировании запускают несколько экземпляров игры и проверяют взаимодействие игроков. Для разработки приложения используйте сборки Player, пакет Multiplayer Play Mode и Network Scene Visualization. - Имитируйте сетевые условия с помощью скриптов или компонента NetcodeTransport. Так можно воспроизвести задержку, джиттер и потерю пакетов, характерные для реальных сетей.

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

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

Сборки Player Запуская несколько экземпляров исполняемого файла игры, можно создавать сеансы и присоединяться к ним. Экземпляры также можно запускать одновременно с Unity Editor, чтобы на одном устройстве имитировать хоста и подключающихся игроков.

Multiplayer Play Mode (MPPM) Входящий в Unity 6 пакет Multiplayer Play Mode (MPPM) позволяет имитировать до четырех игроков на одном компьютере разработчика, используя одни и те же исходные ресурсы. Отдельные сборки Player не требуются, поэтому тестовые итерации занимают меньше времени.

Пользователям macOS В macOS для запуска нескольких экземпляров приложения нужна командная строка. Выполните в Terminal команду open, чтобы запустить отдельный экземпляр приложения.

Например, команда open -n YourAppName.app в Terminal запускает отдельный экземпляр приложения YourAppName.

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

Набор тестовых условий зависит от целевой платформы, региона и особенностей игры. Для начала используйте задержку около 100-150 мс на настольных системах и 200-300 мс на мобильных устройствах, а также потерю 5-10% пакетов. Обязательно проверяйте джиттер и потерю пакетов: они воспроизводят реальную нестабильность сети. Дополнительные рекомендации приведены на этой странице документации.

Для локального тестирования в редакторе можно совместно использовать Network Simulator из пакета Multiplayer Tools и Multiplayer Play Mode. Для тестирования отладочных сборок рекомендуем добавлять неблагоприятные сетевые условия с помощью Network Simulator и собственного кода: окно Network Simulator работает только в редакторе. Для тестирования релизных сборок в Windows рекомендуем clumsy, а в macOS и iOS Network Link Conditioner. В macOS скриптуемой альтернативой Network Link Conditioner служит dummynet: этот гибко настраиваемый инструмент входит в состав операционной системы.

Подробности см. в разделе «Системные инструменты эмуляции сетевых условий».

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

Подключение клиентов: - Присоединение к новому сеансу, повторное подключение после выхода или завершения хостинга, позднее присоединение к уже идущей игре и обработка отклоненного подключения.

- Влияет ли предыдущее состояние клиента на подключение и правильно ли сервер реплицирует состояние игры. - Корректно ли сервер обрабатывает повторное и позднее подключение.

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

Запуск сеанса хостом или сервером: - Запуск нового сеанса после завершения предыдущего, особенно в играх с клиентским хостингом. - Влияет ли состояние приложения перед новым сеансом на игру.

Завершение работы хоста или сервера: - Штатное завершение работы хоста или сервера, особенно при использовании внешних сервисов, например Unity Gaming Services или Lobby. - Оповещаются ли о завершении работы клиенты и внешние сервисы. Тщательная проверка этих сценариев помогает обеспечить стабильную и комфортную сетевую игру. Подробнее см. в материале «Тестирование управления клиентскими подключениями». .

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

- Line Renderer с поддержкой Netcode: визуальная обратная связь может показывать направление, значение или другую полезную для проекта отладочную метрику. Реализация приведена в примере скрипта Line Renderer с поддержкой Netcode.

- Текстовые журналы: позволяют отслеживать невизуальные события, например RPC, и сопутствующие сведения. Добавляйте к сообщениям сетевой тик и идентификатор клиента, чтобы по журналам было проще восстановить хронологию.

- Эмуляция сетевых условий: Network Simulator имитирует на уровне приложения искусственную задержку, джиттер и потерю пакетов, помогая находить связанные с ними ошибки. Подробнее см. в разделе «Системные инструменты эмуляции сетевых условий». - Запись экрана: одновременно записывайте экземпляры клиента и сервера для сравнения игрового процесса в реальном времени. В отладочной сборке отмечайте каждый кадр идентификатором клиента и номером кадра - это дает ориентир при параллельном просмотре. - Увеличение фиксированного временного шага: даже с качественной отладочной графикой и журналами бывает трудно понять происходящее при покадровом анализе. Увеличение значения Fixed Timestep, например до 0,2, делает поведение игры в каждом кадре нагляднее. - Точки останова: при долгой паузе в отладчике сетевое соединение может завершиться по тайм-ауту. Временно увеличьте тайм-аут, чтобы избежать отключения во время остановки игры. Дополнительные советы приведены в руководстве «Приемы и хитрости отладки многопользовательских игр».

Вспомогательный инструмент командной строки Постоянный запуск и тестирование многопользовательских сборок из Unity Editor занимает много времени. Инструмент командной строки может автоматизировать запуск и проверку сборок вне редактора. Начать можно с примера скрипта NetworkCommandLine. Добавьте компонент NetworkCommandLine к GameObject, чтобы скрипт вошел в сборку и был доступен через командную строку. В окне Player Settings откройте Settings for PC, Mac & Linux Standalone > Resolution and Presentation и установите для Resolution значение Windowed. Так несколько экземпляров игры будет удобнее тестировать рядом друг с другом. Скрипт NetworkCommandLine должен сначала проверить, что игра запущена вне редактора. Затем он считывает аргументы командной строки, определяет нужный режим (server, host или client) и запускает соответствующие службы. Это позволяет задавать сетевую роль сборки при запуске из командной строки.

Создайте сборку через File > Build Settings и протестируйте её из командной строки. В Windows: Откройте командную строку и перейдите в каталог со сборкой. Запускайте экземпляры сервера и клиента отдельными командами, при необходимости изменив путь. Например:

<Путь к проекту>\HelloWorld.exe -mode server <Путь к проекту>\HelloWorld.exe -mode client В macOS: Откройте Terminal и используйте аналогичные команды, указав пути в формате macOS. Например: <Путь к проекту>∕HelloWorld.app∕Contents∕MacOS∕<Имя проекта> -mode server <Путь к проекту>∕HelloWorld.app∕Contents∕MacOS∕<Имя проекта> -mode client При необходимости направьте вывод экземпляров игры в текстовые файлы с помощью флага -logfile: так его удобнее отслеживать и анализировать.