Pull to refresh

Уменьшение размера файла с игрой в Godot 4

Level of difficultyEasy
Reading time4 min
Views4.2K

При экспорте своей первой простой аркадной игры в Godot 4.1 я столкнулся с проблемой. Не смотря на простоту проекта и присутствие лишь небольшого количества содержимого: несколько спрайтов и небольшого разрешения фонов, игра весила 67мб. Я полез гуглить в чем проблема и как можно ужать итоговый exe файл.

Результаты поиска способов по уменьшению итогового файла
Результаты поиска способов по уменьшению итогового файла

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

В Godot для экспорта проекта используются шаблоны экспорта. При первом экспорте файлов движок предлагает скачать уже скомпилированные файлы для разных систем разом. Они весят достаточно много.

Размер скачанных шаблонов экспорта под Windows
Размер скачанных шаблонов экспорта под Windows
Предложение скачать файлы вылазит здесь - в меню экспорта файлов (но поскольку я уже качал их, то у меня оно уже не отображается)
Предложение скачать файлы вылазит здесь - в меню экспорта файлов (но поскольку я уже качал их, то у меня оно уже не отображается)

К сожалению настройка

Короче говоря, в официальной документации описана "Optimizing a build for size" - оптимизация билда по размеру. Поскольку я использую качал уже скомпилированный экзешник Godot, я не сразу понял, про какие исходные файлы там говориться. В итоге спустя просмотр роликов на ютубе и попытки чтения официальной документации я разобрался что делать для получения необходимых уменьшенных шаблонов экспорта. Исходники Godot используются как для компиляции самого движка (с возможность вырезать ненужные функции), так и компиляции шаблонов экспорта. Для этого необходимо иметь:

  • Компилятор C++ (я использовал GNU)

  • Интерпретатор Python

  • Библиотеку scons для Python

  • Сами исходные файлы

Компилятор GNU для Windows можно установить через MSYS2. То, как это сделать подробно описано в мануале Microsoft Visual Studio Code.

Интерпретатор Python можно скачать с официального сайта. Не забудьте добавить путь (в PATH) к интерпретатору при установке (можете посмотреть какие нибудь видео по установке интерпретатора, там всё проще чем с MSYS2). Для установки библиотеки scons нужно прописать в командную строку pip install scons.

Для получения файлов идём на официальный Github Godot engine, выбираем версию, которую вы использовали для своей игры (у меня это Godot 4.1).

Нажимаем на выбор ветки (master) и выбираем нужную версию
Нажимаем на выбор ветки (master) и выбираем нужную версию

После этого нажимаем на Code и либо клонируем репозиторий Git (если умеете), либо просто качаем архив zip архив (кнопка Download ZIP).

Я выбрал скачать zip архив
Я выбрал скачать zip архив
Сжатая папка должна выглядеть как то так
Сжатая папка должна выглядеть как то так

Распаковываем архив и переносим файлы в удобное место (я создал папку Godot 4.1 на диске C и переместил файлы туда)

Далее открываем командную строку (win + R, вводим cmd). Прописываем путь к папке: cd C:\Godot 4.1 (вставьте путь к той папке, в которую вы закинули файлы). Идём в документацию Godot и выбираем те флаги компиляции, которые не нужны в вашем проекте (например, если вы не используете 3d движок, можете отключить его). При этом вы должны быть уверены, что эти функции не используются в вашей игре. Я выбрал следующие:

scons platform=windows target=template_release module_text_server_adv_enabled=no module_text_server_fb_enabled=yes disable_3d=yes disable_advanced_gui=yes module_basis_universal_enabled=no module_bmp_enabled=no module_camera_enabled=no module_csg_enabled=no module_dds_enabled=no module_enet_enabled=no module_gridmap_enabled=no module_hdr_enabled=no module_jsonrpc_enabled=no module_ktx_enabled=no module_mbedtls_enabled=no module_meshoptimizer_enabled=no module_minimp3_enabled=no module_mobile_vr_enabled=no module_msdfgen_enabled=no module_multiplayer_enabled=no module_noise_enabled=no module_navigation_enabled=no module_ogg_enabled=no module_openxr_enabled=no module_raycast_enabled=no module_regex_enabled=no module_squish_enabled=no module_svg_enabled=no module_tga_enabled=no module_theora_enabled=no module_tinyexr_enabled=no module_upnp_enabled=no module_vhacd_enabled=no module_vorbis_enabled=no module_webrtc_enabled=no module_websocket_enabled=no module_webxr_enabled=no module_zip_enabled=no optimize=size tools=no -j12

platform=windows означает, что мы создаём шаблон экспорта под Windows (exe файлы). Остальные флаги можете посмотреть в той же документации и выбрать те, что вам точно не нужны.

Через флаг -j8 устанавливаем количество процессов, которые могут быть одновременно (если я правильно понял, зависит от количества потоков процессора).

После этого запускается нудный процесс компиляции, который может продлиться достаточно долго (при значении -j4 она заняла 17 минут, при значение -j14 заняла 9 минут), в зависимости от вашего устройства и флага -j, которого вы поставили.

В итоге создаётся папка bin, в которой вы найдёте exe файл шаблона экспорта, который будет весить значительно меньше установленного через меню экспорта в Godot.

В этой папке находятся exe файлы шаблона экспорта
В этой папке находятся exe файлы шаблона экспорта
Нам нужен этот
Нам нужен этот

Чтобы использовать для компиляции именно его, я переместил файл в папку с шаблонами экспорта (обычно она должна быть в папке AppData\Roaming\Godot\export_templates\версия вашего движка. Далее при экспорте проекта в пользовательском шаблоне указал ссылку на скомпилированный exe файл:

Возможно в будущем добавят функциональность кнопке Проекты --> Настроить конфигурацию сборки движка (Project --> Customize Engine Build Configuration), но пока, согласно посту одного из разработчиков движка, эта функция не работает должным образом, поэтому приходится обходиться этими костылями.

Tags:
Hubs:
Total votes 9: ↑8 and ↓1+7
Comments10

Articles