11个版本 (5个破坏性更新)
0.6.1 | 2024年7月16日 |
---|---|
0.5.2 | 2024年7月16日 |
0.4.1 | 2023年11月11日 |
0.1.3 | 2023年3月14日 |
#369 in 游戏开发
每月586次下载
18KB
238 行
bevy_startup_tree
Bevy兼容性
bevy |
bevy_startup_tree |
---|---|
~0.14 |
>=0.6 |
~0.13 |
>=0.5 |
~0.12 |
>=0.4 |
~0.11 |
>=0.3 |
~0.10 |
>=0.2 |
~0.9 |
~0.1 |
<0.9 |
不支持 |
lib.rs
:
将启动系统的依赖树插入Bevy App
。
使用startup_tree
宏定义Bevy App
的启动系统依赖树。使用AddStartupTree::add_startup_tree
扩展方法将树插入到App
中。强烈建议使用宏来生成由add_startup_tree
消耗的数据结构。
这在启动逻辑复杂且需要分解为多个系统以受益的场景中很有用。其中一些启动逻辑可以并行运行;其他可能需要某些系统以特定顺序运行。例如,一个生成复杂bevy_ui
的系统能够变得非常大、深度嵌套且难以维护。这样的系统可以被分解成多个协同工作以创建复杂实体层次结构的系统。必须运行在生成父实体的系统之后的生成子实体的系统;这就是bevy_startup_tree
变得有用的地方。
Bevy兼容性
bevy |
bevy_startup_tree |
---|---|
~0.14 |
>=0.6 |
~0.13 |
>=0.5 |
~0.12 |
>=0.4 |
~0.11 |
>=0.3 |
~0.10 |
>=0.2 |
~0.9 |
~0.1 |
<0.9 |
不支持 |
行为
组成启动树的系统或节点按深度分组。`startup_tree`宏生成一个二维数组,其中每个索引为`i`的行包含树中深度为`i`的节点。这个二维数组由`add_startup_tree`消耗,其中每个深度的子数组被组合成一个SystemSet
。
startup_tree! {
sys_1_a,
sys_1_b => sys_2
}
此宏调用将生成以下二维数组
[ [sys_1_a, sys_1_b], [sys_2] ]
请注意,有两个子数组:一个用于深度为0的节点,一个用于深度1的节点。
每个子数组的集合在 Startup
调度 中按顺序运行。因此,上述树中插入到 Startup
调度的系统集合将是
- 深度 0 树集合
- 深度 0 树刷新集合
- 深度 1 树集合
- 深度 1 树刷新集合
示例
以下是一个具有启动树的 Bevy App
示例。请注意,应用程序将经过启动阶段,运行一个帧周期,然后退出。
use bevy::{log::LogPlugin, prelude::*};
use bevy_startup_tree::{startup_tree, AddStartupTree};
fn main() {
App::new()
.add_plugins((TaskPoolPlugin::default(), LogPlugin::default()))
.add_systems(PreStartup, begin)
.add_startup_tree(startup_tree! {
sys_1_a,
sys_1_b => sys_2_a,
sys_1_c => {
sys_2_b,
sys_2_c => sys_3_a,
},
})
.add_systems(PostStartup, end)
.run();
}
fn begin() { info!("[Begin]"); }
fn sys_1_a() { info!("1.a"); }
fn sys_1_b() { info!("1.b"); }
fn sys_1_c() { info!("1.c"); }
fn sys_2_a() { info!("2.a"); }
fn sys_2_b() { info!("2.b"); }
fn sys_2_c() { info!("2.c"); }
fn sys_3_a() { info!("3.a"); }
fn end() { info!("[End]"); }
输出
2023-01-08T19:38:41.664766Z INFO example_app: [Begin] 2023-01-08T19:38:41.664906Z INFO example_app: 1.b 2023-01-08T19:38:41.664937Z INFO example_app: 1.c 2023-01-08T19:38:41.664959Z INFO example_app: 1.a 2023-01-08T19:38:41.665104Z INFO example_app: 2.c 2023-01-08T19:38:41.665133Z INFO example_app: 2.a 2023-01-08T19:38:41.665141Z INFO example_app: 2.b 2023-01-08T19:38:41.665204Z INFO example_app: 3.a 2023-01-08T19:38:41.665264Z INFO example_app: [End]
请注意,同一深度的所有日志(具有相同数字的日志)都分组在一起,因为这些系统属于同一集合。集合按顺序运行,导致数字排序。然而,集合内的系统则不按顺序,导致给定数字的字母是无序的。
begin
和 end
系统演示了树在启动时运行的时间。要在树之前运行系统,将其插入到 PreStartup
调度 中。要在树之后运行系统,将其插入到 PostStartup
调度 中。
依赖
~12MB
~208K SLoC