2个版本
0.1.1 | 2024年7月27日 |
---|---|
0.1.0 | 2024年7月20日 |
#203 in GUI
318 每月下载量
被bevy_rectray_picking使用
495KB
1.5K SLoC
bevy_rectray
为bevy提供的最小化2D布局系统(也适用于3D!)。
入门指南
首先添加RectrayPlugin
。
app.add_plugins(RectrayPlugin)
然后向父实体添加RectrayFrame
。这实际上在实体的局部x
和y
轴周围创建了一个2D矩形空间。
commands.spawn(
SpacialBundle {
...
},
RectrayFrame::from_dimension(Vec2::new(1024., 768.)),
)
要将后代实体放置在框架内,向具有TransformBundles
的实体旁边添加RectrayBundle
。
commands.spawn(
PbrBundle {
...
},
RectrayBundle {
...
}
)
由于我们只操作Transform
,因此bevy_rectray
在Transform - Transform2d - Transform
三明治情况下工作。
集成
bevy_rectray
非常简单,不会对bevy组件的变化做出神奇的反应。我们接收Transform2D
和Dimension
,并生成Transform
和RotatedRect
。
其中一些数据可能来自外部来源。例如,如果您想使所有Sprite
占据其Image
或custom_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
中。有关详细信息,请参阅模块级别文档。
展示
- 将项目放置在父项目的锚点处
- 在布局中放置3D网格
- 将单个单词放置在一起形成段落
版本
bevy | bevy_rectray |
---|---|
0.14 | 最新版 |
许可证
根据您选择以下任一许可证进行许可
- Apache许可证2.0版本 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,包括在本工作中包含的贡献,应如上所述双重许可,没有任何附加条款或条件。
依赖关系
~16MB
~316K SLoC