Уменьшение размера файла с игрой в Godot 4
При экспорте своей первой простой аркадной игры в 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), но пока, согласно посту одного из разработчиков движка, эта функция не работает должным образом, поэтому приходится обходиться этими костылями.