#transform #2d #bevy #render #game #graphics

bevy_mod_2d_hierarchy

Bevy插件,提供更便捷的2D操作

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 游戏开发

MIT/Apache

30KB
707

bevy_mod_2d_hierarchy

crates.io MIT/Apache 2.0 crates.io

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