将 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>, ...) {
...
}
我正在构建一个城市建设游戏原型,让村民同时执行许多不同的任务,例如搬运东西、建造、收割,为此我创建了一个带有任务积压数组的 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>, ...) {
...
}