4个版本 (2个破坏性更新)
0.3.1 | 2022年12月24日 |
---|---|
0.3.0 | 2022年11月14日 |
0.2.0 | 2022年11月3日 |
0.1.0 | 2022年11月3日 |
#1774 in 游戏开发
30KB
707 行
bevy_mod_2d_hierarchy
Bevy插件,提供更便捷的2D操作。
- 专门的2D变换和传播系统。
- 与Bevy 3D变换系统独立,可以在同一项目中同时使用。
- 只要插件只查询
GlobalTransform
而不是Transform
,则与现有插件兼容。 - 控制2D变换的传播行为。
- 性能与3D变换相似。传播控制有成本,但某些操作在2D中更便宜。
- 不支持四元数。
- 支持Bevy 0.9
用法
在您的 Cargo.toml
中添加依赖项
[dependencies]
bevy_mod_2d_hierarchy = "0.3"
将插件添加到您的Bevy App中
use bevy::prelude::*;
use bevy_mod_2d_hierarachy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugin(Transform2dPlugin)
// .. rest of systems etc
.run();
}
然后创建一些精灵
pub fn spawn(
mut commands: Commands,
asset_server: Res<AssetServer>,
) {
commands.spawn(Camera2dBundle2::default());
commands.spawn(SpriteBundle2 {
texture: asset_server.load("sprite.png"),
transform2: Transform2::from_rotation(0.5 * PI).with_scale(3.),
..Default::default()
})
.with_children(|builder| {
builder.spawn(SpriteBundle2 {
sprite: Sprite {
color: Color::YELLOW,
..Default::default()
},
texture: asset_server.load("sprite.png"),
transform2: Transform2::from_xy(0., 32.),
propagate: Propagate::TRANSLATION,
..Default::default()
});
});
}
注意
另请参阅:https://github.com/devil-ira/bevy_mod_transform2d。
Transform2d 与 2d_hierarchy 之间的主要区别
- Transform2d 与查询Transform的系统兼容。没有第三方物理和碰撞检测包能与 2d_hierarchy 一起使用;仅就此而言,Transform2d 对于大多数用户来说是一个更好的选择。
- 2d_hierarchy 略微更高效(但这两个库都不是性能导向的,你可能甚至无法测量出差异)。可能会有改进 2d_hierarchy 的空间。
- 2d_hierarchy 使用单个 f32 作为缩放,而 Transform2d 使用 Vec2。
- Transform2d 有一个单独的组件用于 Z 深度,而 2d_hierarchy 则将其保持在变换中。
- 由于 2d_hierarchy 与 Transform 不兼容,因此你不能使用Bevy的内置包,如 SpriteBundle,而必须使用提供的替换 SpriteBundle2(或创建自己的包)。
- 你可以将具有 Transform2d 和常规变换的实体混合在同一变换树中。但在 2d_hierarchy 中不能。如果你想混合 2D 和 3D,这很有用。
- 在 Transform2d 中有变换同步问题的担忧,但这些不太可能发生,并且应该很容易解决等。
- 在 2d_hierarchy 中,你可以控制哪些属性被传播到变换树中(对于旋转和缩放的精灵上的文本标题很有用)。
如果你真的想的话,甚至可以使用 Transform2d 和 2d_hierarchy 一起。但这真的很愚蠢。
依赖关系
~43–57MB
~823K SLoC