Настройка автоматического тестирования базовых механик игр

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

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Настройка автоматического тестирования базовых механик игр
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

id: 226 slug: automated-basic-game-mechanics-testing-setup title_ru: "Настройка автоматического тестирования базовых механик игр" tags: [vr-ar]

Настройка автоматического тестирования базовых механик игр

Ручное тестирование механик работает до тех пор, пока разработчик один и релизы выходят раз в месяц. Как только команда растёт или цикл сборки ускоряется до нескольких в день, ручной QA превращается в узкое место: тестировщик не успевает проверить регрессию по всем механикам после каждого коммита. В итоге баги в физике или логике прогрессии доезжают до релиза.

Что ломается чаще всего и почему ручной тест это пропускает

Самая частая история — сломанный CharacterController после изменения параметров slopeLimit или stepOffset. Работает в Editor, работает в быстром ручном прогоне, но падает на конкретной комбинации скоростей и углов геометрии, которую тестировщик не воспроизводил. Play Mode Test с параметризованным входом — единственный способ систематически покрыть граничные случаи.

Вторая зона риска — игровая логика с состояниями. StateMachine персонажа или GameManager с флагами сессии легко получают невалидный переход: Idle → Attack без прохода через Ready, если в коде добавили shortcut-переход. Такой баг может воспроизводиться только при определённой последовательности инпутов за 10 секунд — ни один тестировщик не будет гонять это вручную после каждого пуша.

Инструментарий и подход

Основной стек для Unity — Unity Test Framework (пакет com.unity.test-framework), который даёт два режима: EditMode Tests (без запуска сцены, чистые unit-тесты) и PlayMode Tests (с полным жизненным циклом GameObject).

EditMode подходит для тестирования чистой логики: балансовые формулы, парсинг данных, расчёт статов, генераторы уровней. Работает быстро, запускается в CI без GPU.

PlayMode нужен для всего, что завязано на физику (Rigidbody, CharacterController), анимации (Animator, Blend Tree переходы), коллизии и корутины. Здесь тест ждёт реальные тики FixedUpdate.

Для VR-механик отдельная история: XR Interaction Toolkit предоставляет XRSimulatedController и XRSimulatedHMD — их используем для симуляции позиции рук и головы без физического HMD. Это позволяет гонять тесты XRGrabInteractable и XRRayInteractor прямо в CI на безголовом агенте.

Структура тестов строится по слоям:

  • Unit-тесты на чистые методы (нет зависимостей от MonoBehaviour)
  • Integration-тесты на взаимодействие компонентов (например, Inventory + PickupSystem + SaveSystem)
  • Smoke-тесты — быстрый прогон критичных механик после каждого коммита
  • Regression-тесты — полный прогон перед релизом

Интеграция с CI строится через Unity Test Runner CLI: unity -batchmode -runTests -testPlatform EditMode -testResults results.xml. Результаты парсим в JUnit XML формате, который понимают GitHub Actions, GitLab CI, TeamCity.

Для Unreal Engine используем Automation System (FAutomationTestBase, IMPLEMENT_SIMPLE_AUTOMATION_TEST) — принцип тот же, разная нотация.

Что конкретно покрываем тестами при настройке

Набор базовых механик, которые закрываем в первую очередь:

  • Движение персонажа: проверка скорости, столкновений, прыжка на разных углах геометрии
  • Система здоровья / урона: граничные значения (0 HP, отрицательный урон, иммунитет)
  • Инвентарь: добавление, удаление, переполнение слотов, стакание предметов
  • Сохранение/загрузка: сериализация состояния и его корректное восстановление
  • Логика прогрессии: разблокировка уровней, условия победы/поражения

Как строится работа

Аудит кодовой базы. Смотрим, как написана логика: есть ли зависимости от MonoBehaviour там, где их можно убрать, используется ли DI (Zenject, VContainer). Сильно связанный код требует рефакторинга перед написанием тестов.

Выделение тестируемых единиц. Там, где нужно, выносим логику из MonoBehaviour в pure C# классы.

Написание тестов. Начинаем со smoke-набора на критичные пути, потом расширяем граничными случаями.

Настройка CI пайплайна. Конфигурируем запуск через Unity License Server или Unity Build Automation, настраиваем репорты.

Документация. Описываем, как добавлять новые тесты, чтобы команда поддерживала покрытие самостоятельно.

Объём задачи Ориентировочные сроки
Настройка Test Framework + 10–15 базовых тестов 3–5 дней
Полный тестовый набор (50–80 тестов) + CI 2–4 недели
VR-проект с XRSimulated тестами 3–5 недель

Стоимость рассчитывается индивидуально после анализа архитектуры проекта.