Nan*_*oni 3 compiler-optimization rust rust-cargo bevy
我开始遵循这个关于如何在 bevy 中制作游戏的教程。代码编译得很好,但仍然很慢(老实说,我不确定这是否正常,大约需要 8 秒),但是当我启动游戏时,窗口会变白 ( )Not Responding几秒钟(大约相同的时间)正确加载之前的时间(作为编译时间,可能稍微少一点)。
这是我的Cargo.toml:
[package]
name = "rustship"
version = "0.1.0"
edition = "2021"
[dependencies]
bevy = "0.8.1"
# Enable a small amount of optimization in debug mode
[profile.dev]
opt-level = 1
# Enable high optimizations for dependencies (incl. Bevy), but not for our code:
[profile.dev.package."*"]
opt-level = 3
[workspace]
resolver = "2"
Run Code Online (Sandbox Code Playgroud)
我尝试了使用和不使用工作区解析器的情况。我的 rustup 工具链是nightly-x86_64-pc-windows-gnu,我用它rust-lld来链接程序:
[target.nightly-x86_64-pc-windows-gnu]
linker = "rust-lld.exe"
rustflags = ["-Zshare-generics=n"]
Run Code Online (Sandbox Code Playgroud)
根据官方的 bevy 设置指南,这样应该会更快。我尝试过有rust-lld和没有,但似乎没有改变任何东西。
以下是输出cargo run(A_NUMBER 是 4 位数字):
AdapterInfo { name: "NVIDIA GeForce RTX 3090", vendor: A_NUMBER, device: A_NUMBER, device_type: DiscreteGpu, backend: Vulkan }
Run Code Online (Sandbox Code Playgroud)
关于如何改进编译时间并使窗口直接加载有什么想法吗?我的游戏一点也不重。现在,我只是加载一个精灵。教程中的人使用 MacOS,对他来说似乎速度相当快。
当您想要最快的编译时间时,请确保启用 Bevy 的“dynamic_linking”功能。它将 Bevy 构建为系统库(例如.dllWindows 的文件)并将您的游戏链接到该库,而不是将 Bevy 构建到您的应用程序中,这节省了大量编译时间。不建议在发布版本中这样做,因为您必须与您的应用程序一起分发该 dll,而 Bevy 并没有真正为此设置。
要启用该功能,我建议您在通过 Cargo 运行项目时添加该功能。
cargo run --feature "bevy/dynamic_linking"
Run Code Online (Sandbox Code Playgroud)
这比将该功能添加到您的cargo.toml中更好,因为您不必每次想要进行发布构建时都更改您的cargo.toml。通常您只需将 `--feature "bevy/dynamic_linking" 添加到 IDE 的运行配置即可。
您至少需要使用 Bevy 0.9.1 版本。请注意,在 0.10 版本中,该功能已从 重命名dynamic为dynamic_linking。
重要的!:在 Windows 上使用动态链接功能时,cargo.toml 中需要这些行:
cargo run --feature "bevy/dynamic_linking"
Run Code Online (Sandbox Code Playgroud)
在 Clion 右上角编辑运行配置并添加--features bevy/dynamic_linking到命令中。

重要的!:您还需要将其添加到设置下的“External Linters”附加参数中,这样它就不会在没有它的情况下构建,并由于使用不同的功能进行编译而导致完全重建:
免责声明:我不使用 VS Code。欢迎提出修改建议!
在您的 launch.json 文件中,您看到“cargo”的任何位置都将“--features=bevy/dynamic_linking”添加到“args”中。
有关 Windows 上动态功能的两个问题现已解决,从 版本开始我就可以在 Windows 上使用它了0.9.1。
https://github.com/bevyengine/bevy/issues/2921#issuecomment-1315886660 https://github.com/bevyengine/bevy/issues/1110#issuecomment-1312926923
我专门为 Windows重写了GilRs 后端来完成这项工作,哈哈。(GilRs 由 Bevy 使用,它链接的 xInput 库存在动态链接问题)
我刚刚评论了Bevy 网站有关更新说明的相关问题。