3个版本
0.1.2 | 2024年7月15日 |
---|---|
0.1.1 | 2024年7月6日 |
0.1.0 | 2024年7月2日 |
在游戏开发类别中排名第394
每月下载量266次
34KB
317 代码行
Bevy Coroutine
一个简单的Bevy库,用于运行类似于Unity的协程的协程。
Bevy Coroutine非常实验性,新版本可能包含破坏性更改!
使用方法
Bevy Coroutine背后的主要动机是允许您将系统的执行分散到多个帧。它还有助于按时间顺序管理和运行系统。
use bevy::prelude::*;
use bevy_coroutine::prelude::*;
fn startup_system(mut commands: Commands) {
// Launch the coroutine from a system
commands.add(Coroutine::new(my_coroutine));
}
fn my_coroutine(
) -> CoResult {
let mut res = co_break();
// Print number from 0 to 3, printing a single number every second
for i in 0..=3 {
res.add_subroutines((
wait(std::time::Duration::from_secs(1)),
with_input(i, print_number),
));
}
res
}
fn print_number(
In(i): In<u32>,
) -> CoResult {
println!("{i}");
co_break()
}
协程是系统。它们可以访问任何系统参数,如Query
和Res
。
协程不使用'yield'语句,而是返回一个CoResult
。The CoResult
表示协程应该'中断'并停止其执行,还是'继续'并在下一次更新时再次执行。此外,协程可以运行其他协程,并通过将它们作为子程序添加到CoResult
中等待它们的完成。
执行状态可以使用Local
作为参数在帧之间存储。
use bevy::prelude::*;
use bevy_coroutine::prelude::*;
fn my_coroutine(
mut i: Local<u32>,
) -> CoResult {
if *i <= 3
{
println!("{}", *i);
*i += 1;
return co_continue(); // Rerun the system next frame
}
co_break()
}
性能
每个协程都在一个专用的系统中运行。它们不会与其他协程或其他Bevy系统并行运行。
对于CPU密集型任务,请考虑使用bevy_tasks或bevy_defer。
版本
bevy | bevy_coroutine |
---|---|
0.14 | 0.1.2 |
0.14 | 0.1.1 |
0.14.0-rc.4 | 0.1.0 |
依赖项
~23MB
~411K SLoC