При экспорте своей первой простой аркадной игры в Godot 4.1 я столкнулся с проблемой. Не смотря на простоту проекта и присутствие лишь небольшого количества содержимого: несколько спрайтов и небольшого разрешения фонов, игра весила 67мб. Я полез гуглить в чем проблема и как можно ужать итоговый exe файл.
На моё удивление быстрый поиск ответа, на такой, как мне казалось, очевидный вопрос не привёл почти ни к чему. Погуглив тоже самое на английском, информации нашлось больше, однако её пришлось собирать по кускам, т.к. она не давала общего представления, для человека недавно открывшего для себя как этот движок, так и создание игр в целом.
В Godot для экспорта проекта используются шаблоны экспорта. При первом экспорте файлов движок предлагает скачать уже скомпилированные файлы для разных систем разом. Они весят достаточно много.
К сожалению настройка
Короче говоря, в официальной документации описана "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).
После этого нажимаем на Code и либо клонируем репозиторий Git (если умеете), либо просто качаем архив zip архив (кнопка Download 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.
Чтобы использовать для компиляции именно его, я переместил файл в папку с шаблонами экспорта (обычно она должна быть в папке AppData\Roaming\Godot\export_templates\версия вашего движка. Далее при экспорте проекта в пользовательском шаблоне указал ссылку на скомпилированный exe файл:
Возможно в будущем добавят функциональность кнопке Проекты --> Настроить конфигурацию сборки движка (Project --> Customize Engine Build Configuration), но пока, согласно посту одного из разработчиков движка, эта функция не работает должным образом, поэтому приходится обходиться этими костылями.
Комментарии (9)
MrBuzzy
16.12.2023 11:30Разве в документации нет статьи по этому поводу, точно видел. Или она не дала достаточно информации?
Simplast Автор
16.12.2023 11:30Я написал в начале, что как новичку мне было сложно разобраться со всеми шагами в начале. В документации есть флаги компиляции, про них написано понятно и подробно и я ссылаюсь на документацию ближе к концу, но разъяснения про то, как сделать все это пошагово нет, статьи разделены и неинтуитивно связаны друг с другом (по крайней мере мне так кажется). Плюсом я качал уже готовый движок Godot, не компилировав его (а сам движок можно скомпилировать из исходных файлов также, как и шаблоны экспорта, указав другие флаги компиляции), что помогло бы мне сообразить быстрее, поэтому я не понимал что конкретно нужно компилировать
PrinceKorwin
Не нашел а статье так в итоге на сколько удалось уменьшить размер файла?
Arendentum
Так в предпоследнем скрине видно - 35 867 Кб
PrinceKorwin
С телефона не особо там видно. А каждый открывать и искать не стал. Спасибо за информацию.
furior
Как я понял из текста, это файл кастомного компилятора, а не игры. Возможно не прав.
Simplast Автор
Это не компилятор, файл экспорта по сути содержит сам движок. При экспорте файлы игры (ваши спрайты, звуки, музыка и тд) как бы совмещаются с ним в итоговый исполняемый файл и игра работает за счёт этого. Те файлы экспорта, которые Godot предлагает скачать автоматически, содержат движок со всеми функциями (3d движок, все виды нод и тд). Скомпилировав файл экспорта самому, можно выключить те части движка, которые не нужны вашей игре (условно 3d движок в 2d игре) и снизить за счёт этого размер итогового файла с игрой