#布局 #bevy #UI

bevy_rectray

为bevy提供的最小化2D布局系统

2个版本

0.1.1 2024年7月27日
0.1.0 2024年7月20日

#203 in GUI

Download history 104/week @ 2024-07-14 121/week @ 2024-07-21 89/week @ 2024-07-28 4/week @ 2024-08-04

318 每月下载量
bevy_rectray_picking使用

MIT/Apache

495KB
1.5K SLoC

bevy_rectray

为bevy提供的最小化2D布局系统(也适用于3D!)。

Crates.io Docs Bevy tracking

入门指南

首先添加RectrayPlugin

app.add_plugins(RectrayPlugin)

然后向父实体添加RectrayFrame。这实际上在实体的局部xy轴周围创建了一个2D矩形空间。

commands.spawn(
    SpacialBundle {
        ...
    },
    RectrayFrame::from_dimension(Vec2::new(1024., 768.)),
)

要将后代实体放置在框架内,向具有TransformBundles的实体旁边添加RectrayBundle

commands.spawn(
    PbrBundle {
        ...
    },
    RectrayBundle {
        ...
    }
)

由于我们只操作Transform,因此bevy_rectrayTransform - Transform2d - Transform三明治情况下工作。

集成

bevy_rectray非常简单,不会对bevy组件的变化做出神奇的反应。我们接收Transform2DDimension,并生成TransformRotatedRect

其中一些数据可能来自外部来源。例如,如果您想使所有Sprite占据其Imagecustom_size的空间,请手动添加此类系统

pub fn update_sprite_dimension(
    scaling_factor: Query<&Window, With<PrimaryWindow>>,
    mut query: Query<(&mut Sprite, &Handle<Image>, &mut Dimension)>,
    assets: Res<Assets<Image>>
) {
    let scaling_factor = scaling_factor
         .get_single()
         .map(|x| x.scale_factor())
         .unwrap_or(1.0);
    query.iter_mut().for_each(|(sp, im, mut dimension)| {
        dimension.0 = sp.custom_size.or_else(|| {
            sp.rect.map(|rect| (rect.max - rect.min) * scaling_factor)
                .or_else(|| {
                    assets.get(im)
                        .map(|x|x.size().as_vec2() * scaling_factor)
                })
        }).unwrap_or(Vec2::ZERO)
    })
}

如果您想执行相反的行为,您可以从输出的RotatedRect::dimension更新精灵的大小。

容器

RectrayContainerBundle添加到将子项放入Layout中。有关详细信息,请参阅模块级别文档。

展示

  • 将项目放置在父项目的锚点处

anchors

  • 在布局中放置3D网格

3d

  • 将单个单词放置在一起形成段落

text

版本

bevy bevy_rectray
0.14 最新版

许可证

根据您选择以下任一许可证进行许可

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,包括在本工作中包含的贡献,应如上所述双重许可,没有任何附加条款或条件。

依赖关系

~16MB
~316K SLoC