https://github.com/totalkrill/bevy_ui_anchor
Microlibrary for adding anchoring to UI
https://github.com/totalkrill/bevy_ui_anchor
Last synced: 8 months ago
JSON representation
Microlibrary for adding anchoring to UI
- Host: GitHub
- URL: https://github.com/totalkrill/bevy_ui_anchor
- Owner: TotalKrill
- Created: 2024-08-07T19:46:46.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-21T14:42:50.000Z (over 1 year ago)
- Last Synced: 2025-01-31T21:34:52.839Z (over 1 year ago)
- Language: Rust
- Size: 13.8 MB
- Stars: 11
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# bevy_ui_anchor
[](https://crates.io/crates/bevy_ui_anchor)
[](https://docs.rs/bevy_ui_anchor)
[](https://opensource.org/licenses/MIT)
A Rust crate for anchoring UI elements to specific points or entities in the world using the Bevy game engine.

## Features
Provides an AnchorUiNode component that:
- Anchor UI nodes to world positions or entities.
- Supports horizontal and vertical anchoring.
- Compatible with Bevy's ECS architecture.
| Bevy version | Crate version |
| ------------ | ------------------------ |
| 0.17 | 0.10 |
| 0.16 | 0.6 - 0.9 |
| 0.15 | 0.3 - 0.5 |
| 0.14 | 0.1 - 0.2 |
## Example
``` rust
//! Demonstrates how to work with Cubic curves.
use bevy::{
color::palettes::css::{ORANGE, SILVER, WHITE},
prelude::*,
};
use bevy_ui_anchor::{AnchorPoint, AnchorUiConfig, AnchorUiPlugin, AnchoredUiNodes};
#[derive(Component)]
/// We need a marker for the camera, so the plugin knows which camera to perform position
/// calculations towards
pub struct UiCameraMarker;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
// We need to define, which camera the anchorplugin will be anchored to
.add_plugins(AnchorUiPlugin::::new())
.add_systems(Startup, setup)
.run();
}
fn setup(
mut commands: Commands,
mut meshes: ResMut>,
mut materials: ResMut>,
) {
// The camera
commands.spawn((
// mark it
UiCameraMarker,
IsDefaultUiCamera,
Camera3d::default(),
Transform::from_xyz(0., 6., 12.).looking_at(Vec3::new(0., 3., 0.), Vec3::Y),
DirectionalLight::default(),
));
// Spawning a cube with anchored UI, using bevy relations
commands.spawn((
Mesh3d(meshes.add(Cuboid::new(0.3, 0.3, 0.3))),
MeshMaterial3d(materials.add(Color::from(ORANGE))),
Transform::from_translation([0.0, 0.5, 0.0].into()),
// Define the anchor relationship
AnchoredUiNodes::spawn_one((
AnchorUiConfig {
anchorpoint: AnchorPoint::bottomleft(),
offset: Some(Vec3::new(0.0, 0.5, 0.0)),
..Default::default()
},
Node {
border: UiRect::all(Val::Px(2.)),
..Default::default()
},
BorderColor::all(WHITE),
BorderRadius::all(Val::Px(2.)),
Outline::default(),
Children::spawn_one(
// text
Text("Text Anchored in bottom left".into()),
),
)),
));
// ground plane
commands.spawn((
Mesh3d(meshes.add(Plane3d::default().mesh().size(50., 50.))),
MeshMaterial3d(materials.add(Color::from(SILVER))),
));
}
```