Найти тему
Another Art

Создание билда в Unity

Приветствую всех друзья! В прошлой статье были рассмотрены типичные проблемы и способы их решения при работе с кроссплатформенными приложениями, создаваемыми на Unity. Сегодня мы рассмотрим окно создания билда. Билд – это собранная из ресурсов вашего проекта готовая игра, ее конечное представление зависит от платформы, на которую вы его собираете. Например для Android это будет файл с расширением .apk, а для ПК (персонального компьютера) это будет папка с файлами в корне которой будет лежать файл с названием вашей игры и расширением .exe. Но помимо этого также будут рассмотрены такие вещи как уменьшение размера билда, и конвейер создания билда (крайне кратко).

Картинка для привлечения внимания из открытых источников
Картинка для привлечения внимания из открытых источников

Окно настройки сборки содержит все настройки и параметры, необходимые для создания билда на различные платформы. Из этого окна можно создать билд разработчика (development build) чтобы протестировать ваше приложение, а также сделать финальный билд который можно будет публиковать в магазины приложений. Чтобы настроить параметры билда вашего приложения перейдите в контекстное меню File\Build Settings.

Окно билда
Окно билда

Используйте панель Scenes in Build для управления тем, какие сцены попадут в ваш билд. Просто поставьте галочку напротив сцены, которая должна попасть в билд. В разделе Platform вы можете выбрать на какую платформу вы хотите сделать билд, а также здесь можно настроить параметры билда, например, выбрать метод сжатия данных (Compression Method). Ниже я кратко раскрою для чего нужны остальные параметры сверху вниз:

  • Target Platform – это платформа на которую будет сделан билд
  • Architecture – как вы знаете существуют 32х разрядные и 64х разрядные процессоры, так вот с помощью этой настройки мы можем выбрать на какую разрядность делать билд
  • Server Build – при переключении данного чекбокса Unity создаст билд для сервера, который не имеет графики, а также будет использовать платформозависимый определитель UNITY_SERVER для кода. Если мы с такой галочкой сделаем билд для Windows он будет работать как консольное приложение.
  • Copy PDB files – при включении данного чекбокса Unity при билде на ПК включит в него PDB файлы. Файлы PDB содержат информацию об отладке приложения, которая полезна для отладки, но при этом она увеличивает размер вашего билда.
  • Create Visual Studio Solution – данный чекбокс при включении создаст файлы решения для вашего проекта, чтобы вы могли создать окончательный исполняемый файл в Visual Studio.
  • Development Build – данный чекбокс при включении активирует отладку и профилировку в билде. Используйте этот параметр, когда хотите протестировать свое приложение.
  • Autoconnect Profiler – этот чекбокс можно включить только при включенном Development Build. Когда этот параметр активирован профайлер Unity (о нем еще будет статья, если вкратце то нужен для просмотра и отладки работы приложения) будет автоматически подключаться к билду и профилировать его.
  • Deep Profiling – этот чекбокс также можно включить только при активном Development Build. Он автоматически подключает глубокую профилировку в профайлере. Эта функция позволяет более глубоко исследовать ваше приложение, но при этом работа всех скриптов и всего приложения будет замедленна.
  • Script Debugging – этот чекбокс также можно включить только при активном Development Build. Это позволяет вам отлаживать свой код. Эта функция не доступна на WebGL.
  • Scripts Only Build – Запустите сборку билда чтобы проверить изменились ли скрипты. Для этого проект уже должен быть собран хотя бы один раз.
  • Compression Method – Выше я уже писал об этом – позволяет выбрать метод компрессии (сжатия) игровых ресурсов.

Для создания билда нажмите на кнопку Build – после чего Unity предложит выбрать место хранения и имя билда (хранить билд в папке Assets нельзя), затем начнется процесс сборки билда. Кнопка Build And Run создаст билд после чего сразу запустит его на платформе (то есть если у вас, например, билд на Android, то телефон должен быть подключен к компьютеру, после того как билд будет собран Unity установит его на устройство).

Важно свести размер файла билда к минимуму, особенно для мобильных устройств, так как обычно магазины приложений для мобильных накладывают ограничения на размер билда. Первым шагом в уменьшении размера является определение того, какие ресурсы вносят в него наибольший вклад, поскольку именно эти ресурсы являются наиболее вероятными кандидатами на оптимизацию. Эта информация доступна в логе редактора сразу после выполнения сборки билда. Перейдите в окно консоли (если оно у вас не открыто, то откройте его по следующему пути в контекстном меню Window\General\Console), нажмите на небольшой выпадающий список в правом верхнем углу и выберите пункт Open Editor Log.

Открытый лог редактора после создания билда
Открытый лог редактора после создания билда

Журнал редактора показанный выше предоставляет сводку ассетов по категориям, а также показывает какое процентное соотношение по памяти занимает тот или иной тип. После чего он начинает в порядке убывания перечислять от самого большого к самому маленькому ресурсы в игре. Обычно текстуры/звуки/анимации весят много в то время как скрипты/уровни/шейдера мало. Также не забывайте, что все ресурсы игры, хранящиеся в папке Resources (что это за папка, для чего она нужна и как с ней работать я еще опишу в своей будущей статье) будут добавлены в итоговый билд.

Журнал редактора поможет вам определить какие именно ресурсы необходимо оптимизировать или удалить, но перед началом работы вам следует помнить о следующем:

  • Во время сборки билда Unity кодирует импортированные ресурсы (например, текстуры) в свои внутренние форматы, поэтому для работы выбирайте формат файла, с которым вам удобно работать (например, png).
  • Unity удаляет большинство неиспользуемых ресурсов во время сборки, поэтому вы ничего не получите вручную, удалив их из проекта. Единственные ресурсы, которые Unity удалить не может это скрипты и файлы, хранящиеся в папке Resources (потому как Unity не знает какие файлы из этой папки будут использованы вами во время работы игры, а какие нет). Имея это ввиду вы всегда должны держать ресурсы в папке Resources имеющие отношение к самой игре – остальные смело удаляйте. Также можно подумать о замене ассетов (они же ресурсы) из папки Resources на AssetBundles – это означает что такие ассеты будут загружаться динамически, тем самым уменьшая размер билда. О AssetBundles будет отдельная статья.

Предложения по уменьшению размера билда.

Обычно текстуры занимают большую часть размера билда. Первым решением уменьшающим их является компрессия (она настраивается при импорте текстур в инспекторе, как всегда в будущем я напишу подробную статью об этом). Если это не уменьшает размер файла достаточно, попробуйте уменьшить физический размер текстуры (в пикселях). Чтобы сделать это без изменений исходного файла, выберите текстуру в окне проекта и в окне инспектора измените параметр Max Size. Чтобы увидеть, как это выглядит в игре, увеличьте масштаб игрового объекта, который использует эту текстуру, а затем отрегулируйте Max Size, пока он не начнет выглядеть в окне сцены хуже. Изменение параметра Max Size никак не влияет на ваш ассет текстуры, только на его разрешение в игре.

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

По умолчанию Unity сжимает все текстуры при импорте. Для ускорения рабочего процесса в редакторе перейдите по пути Edit\Preferences и во вкладке General уберите галочку напротив пункта Compress Assets on Import. Все текстуры сжимаются при сборке билда независимо от этого параметра.

Вы также можете сжимать сетки и клипы анимации при импорте (опять же для уменьшения веса итогового билда). Чтобы включить компрессию сетки (Mesh compression), выберите в окне проекта необходимую вам сетку, и в окне инспектора установите напротив пункта Mesh compression один из трех параметров: Low, Medium или High. Помните, что сжатие сеток и анимаций вносит в них неточность, поэтому с этими параметрами нужно поэкспериментировать чтобы подобрать нужные для себя значения.

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

И последнее о чем сегодня хотелось бы сказать по теме уменьшения билда – это сборки .NET API используемые для разработки в Unity. Их существует всего две – 4.х и .NET Standard 2.0, последняя имеет урезанный функционал, но при этом и весит меньше, что в итоге поможет вам уменьшить размер билда.

При создании билда иногда требуется каким-то образом изменить ход сборки. Например сделать так, чтобы Unity собрал не только билд на ПК, а также добавил установщик к нему. Чтобы сделать это нужно воспользоваться скриптом редактора, используя BuildPipeline.BuildPlayer, он нужен для запуска сборки, а затем запустить код постобработки который вам нужен:

Этот код запускает сборку билда для ПК, а также копирует в конечную папку билда файл Readme.txt из ресурсов игры.
Этот код запускает сборку билда для ПК, а также копирует в конечную папку билда файл Readme.txt из ресурсов игры.

Выше самый простой из примеров того как можно сделать свой сборщик билдов. О возможностях BuildPipeline я более подробно расскажу в своих будущих статьях.

На сегодня это все. В следующей статье я расскажу о некоторых известных проблемах и способах их решения в Unity. Спасибо всем, кто дочитал эту статью до конца, подписывайтесь на канал, ставьте лайки, а для тех, у кого появились вопросы - спрашивайте в комментариях! А если вы хотите помочь данному каналу в развитии – делитесь этой статьей с друзьями в социальных сетях!

МОЙ КАНАЛ НА YOUTUBE | ГРУППА МОЕЙ ИНДИ ИГРЫ В VK