← Назад к вопросам

Что такое Unity Batch mode?

2.0 Middle🔥 52 комментариев
#Unity Core#Оптимизация

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Unity Batch Mode?

Unity Batch Mode — это режим работы движка Unity без графического интерфейса (GUI), предназначенный для автоматизации процессов сборки проекта, выполнения скриптов и проведения различных операций через командную строку или скрипты. Это ключевой инструмент для непрерывной интеграции (CI/CD), автоматизированного тестирования и массовой сборки проектов в продакшн-среде.

Основные возможности и сценарии использования Batch Mode

  • Автоматизация сборки (Build Automation): Позволяет создавать сборки для различных платформ (Windows, Android, iOS и др.) без участия человека. Это основа CI/CD-пайплайнов в Jenkins, GitLab CI, GitHub Actions и других системах.
  • Запуск юнит-тестов и плеймод-тестов: Можно выполнять как редакторские тесты (Edit Mode), так и внутриигровые (Play Mode) в изолированном окружении, получая детальные результаты (например, в формате NUnit).
  • Выполнение редакторских скриптов (Editor Scripts): Позволяет запускать кастомные C#-скрипты для пакетной обработки ассетов, генерации контента, применения настроек к множеству сцен или объектов.
  • Создание Asset Bundles: Автоматическая подготовка и сборка ассет-бандлов для систем динамической загрузки контента.
  • Генерация префабов и освещения (Lightmapping): Фоновый расчет запеченного освещения и выполнение других ресурсоемких задач, которые не требуют интерактивности.

Ключевые преимущества перед обычным режимом работы

  1. Отсутствие GUI: Не требует запуска полноценного редактора, что экономит ресурсы (память, CPU) и позволяет работать на удаленных серверах или виртуальных машинах без видеокарты.
  2. Детерминированность и надежность: Все операции выполняются строго по заданному сценарию, что исключает человеческий фактор и повышает повторяемость результатов.
  3. Интеграция в DevOps-процессы: Легко встраивается в существующие цепочки разработки и доставки ПО, позволяя автоматизировать рутину.

Как использовать Batch Mode: базовый синтаксис и примеры

Запуск осуществляется через исполняемый файл Unity (в моем случае, Unity.exe на Windows или Unity на macOS/Linux) с набором аргументов командной строки.

Базовый синтаксис запуска:

Unity.exe -batchmode -quit -projectPath "C:\MyProject" -executeMethod MyEditorScript.BuildGame

Рассмотрим ключевые аргументы:

  • -batchmode – собственно, активация нужного нам режима.
  • -quit – автоматический выход из Unity после завершения выполнения всех команд (обязателен для автоматизации, иначе процесс "зависнет").
  • -projectPath – путь к проекту, с которым нужно работать.
  • -executeMethod – полное имя статического метода в редакторском скрипте (Editor или EditorWindow), который будет выполнен. Это основной "точка входа" для кастомной логики.

Пример редакторского скрипта для сборки в Batch Mode

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

Создаем скрипт BuildScript.cs и помещаем его в папку Assets/Editor:

using UnityEditor;
using UnityEngine;
using System.IO;

public static class BuildScript
{
    public static void BuildWindows64()
    {
        // Определяем путь для сохранения сборки
        string buildPath = Path.Combine(Application.dataPath, "../Builds/Windows/MyGame.exe");
        
        // Собираем все сцены, добавленные в Build Settings
        string[] scenes = EditorBuildSettings.scenes
            .Where(scene => scene.enabled)
            .Select(scene => scene.path)
            .ToArray();

        BuildPipeline.BuildPlayer(
            scenes, 
            buildPath, 
            BuildTarget.StandaloneWindows64, 
            BuildOptions.None
        );
    }
}

Запускаем сборку через командную строку:

Unity.exe -batchmode -quit -projectPath "C:\UnityProjects\MyGame" -executeMethod BuildScript.BuildWindows64 -logFile "C:\Logs\build.log"

Здесь также использован аргумент -logFile, который указывает путь к файлу лога. Анализ логов критически важен при отладке автоматизированных процессов, так как в Batch Mode вы не видите консоль Unity.

Важные нюансы и ограничения

  • Только статические методы: Метод, указанный в -executeMethod, должен быть статическим и принимать либо 0 параметров, либо один строковый (string).
  • Ограничения на использование Debug.Log: В Batch Mode некоторые системные диалоги или операции, требующие взаимодействия с пользователем (например, EditorUtility.DisplayDialog), приведут к ошибке и остановке процесса. Нужно использовать Debug.Log и проверять логи.
  • Правильная настройка проекта: Все необходимые настройки (например, настройки для Android в Player Settings) должны быть заранее применены к проекту, так как в Batch Mode их интерактивное изменение невозможно.
  • Управление лицензией: При использовании на CI-серверах часто требуется активация лицензии Unity через командную строку с помощью аргументов -returnlicense или -manuallicensefile.

Итог: Batch Mode — это мощный, промышленный инструмент, который переводит рутинные операции Unity из плоскости ручного труда в область полностью автоматизированных, масштабируемых и надежных процессов. Его освоение — обязательный навык для профессионального Unity-разработчика, работающего в команде над коммерческим проектом.

Что такое Unity Batch mode? | PrepBro