将 TaskManager 脚本从 gdscript/Godot 迁移到 bevy 和 rust

Migrating a TaskManager script from gdscript/Godot to bevy and rust

我正在构建一个城市建设游戏原型,让村民同时执行许多不同的任务,例如搬运东西、建造、收割,为此我创建了一个带有任务积压数组的 TaskManager 单例脚本和一个活动任务数组,可以 select 哪些任务根据优先级从积压状态变为活动状态,运行 活动列表中每个任务各自的 run_task() 方法,并在他们完成了。我仍在学习 rust 和 bevy,但从我读到的内容来看,我无法像在 godot 中那样在 bevy 中真正成为单身人士。在这种情况下我有什么选择?抱歉,如果这不是此类问题的地方,但我很难找到有关此类与引擎和生锈相关的信息。

除非我误解了您的需要,否则这是通过使用“资源”完成的。来自 Bevy book:

... But most Apps will also require "globally unique" data of some kind. In Bevy ECS, we represent globally unique data using Resources.

像这样使用:

App::build()
    .add_resource(TaskManager{ ... })
    .add_system(process_tasks.system())
    ...
fn process_tasks(manager: Res<TaskManager>, ...) {
    ...
}