为尺寸优化构建

解释

有时,需要针对大小而不是速度来优化构建。这意味着不编译引擎上的未使用的函数,以及使用特定的编译器标志来帮助减小构建大小。常见情况包括为移动和Web平台创建构建。

本教程旨在概述创建较小二进制文件的不同方法。在继续之前,建议阅读之前有关为每个平台编译Godot的教程。

参见

You can use the online Godot build options generator to generate a custom.py file containing SCons options. You can then save this file and place it at the root of your Godot source directory.

禁用3D

对于2D游戏,拥有整个3D引擎通常没有任何意义。因此,有一个构建标志来禁用它:

scons p=windows target=release tools=no disable_3d=yes

必须禁用工具才能使用此标志,因为编辑器不能在没有3D支持的情况下运行。没有它,二进制大小可以减少大约15%。

禁用高级GUI节点

Most small games don't require complex GUI controls such as Tree, ItemList, TextEdit or GraphEdit. They can be disabled using a build flag:

scons p=windows target=release tools=no disable_advanced_gui=yes

禁用不需要的模块

许多Godot的功能都作为模块提供。您可以使用以下命令查看模块列表:

scons --help

将显示可以禁用的模块列表以及所有构建选项。如果您正在开发简单的2D游戏,则可以禁用其中的许多功能:

scons p=windows target=release tools=no module_arkit_enabled=no module_assimp_enabled=no module_bmp_enabled=no module_bullet_enabled=no module_camera_enabled=no module_csg_enabled=no module_dds_enabled=no module_enet_enabled=no module_etc_enabled=no module_gdnative_enabled=no module_gridmap_enabled=no module_hdr_enabled=no module_jsonrpc_enabled=no module_mbedtls_enabled=no module_mobile_vr_enabled=no module_opensimplex_enabled=no module_opus_enabled=no module_pvr_enabled=no module_recast_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_webm_enabled=no module_webp_enabled=no module_webrtc_enabled=no module_websocket_enabled=no module_xatlas_unwrap_enabled=no

If this proves not to work for your use case, you should review the list of modules and see which ones you actually still need for your game (e.g. you might want to keep networking-related modules, regex support, or theora/webm to play videos).

Alternatively, you can supply a list of disabled modules by creating custom.py at the root of the source, with the contents similar to the following:

# custom.py

module_arkit_enabled = "no"
module_assimp_enabled = "no"
module_bmp_enabled = "no"
module_bullet_enabled = "no"
module_camera_enabled = "no"
module_csg_enabled = "no"
module_dds_enabled = "no"
module_enet_enabled = "no"
module_etc_enabled = "no"
module_gdnative_enabled = "no"
module_gridmap_enabled = "no"
module_hdr_enabled = "no"
module_jsonrpc_enabled = "no"
module_mbedtls_enabled = "no"
module_mobile_vr_enabled = "no"
module_opensimplex_enabled = "no"
module_opus_enabled = "no"
module_pvr_enabled = "no"
module_recast_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_webm_enabled = "no"
module_webp_enabled = "no"
module_webrtc_enabled = "no"
module_websocket_enabled = "no"
module_xatlas_unwrap_enabled = "no"

针对大小而不是速度优化

Godot 3.1 onwards allows compiling using size optimizations (instead of speed). To enable this, set the optimize flag to size:

scons p=windows target=release tools=no optimize=size

某些平台如WebAssembly默认情况下已使用此模式。

剥离二进制文件

如果从源代码构建,请记住从二进制文件中剥离调试符号:

strip godot.64

使用UPX压缩二进制文件

如果您的目标是桌面平台,可以使用 UPX 压缩器。这可以大大减少二进制大小。

但是,请记住,某些防病毒程序可能会将UPX打包的二进制文件检测为病毒。因此,如果您要发布商业游戏,确保对您的二进制文件进行签名或使用将其分发的平台。