871 words
4 minutes
Zero부터 시작하는 bevy - 2
번들
번들은 commands.spawn을 통해 소환할수 있고, 종류가 좀 많다. 그러니 우리는 몇개만 알아보자
NodeBundle
NodeBundle은 간단하게 화면에 사각형을 띄우기에 좋다.
NodeBundle은 다음과 같은 값이 들어간다 (많이 쓰이는것만 주석을 달아놨다)
pub struct NodeBundle {
pub node: Node,
pub style: Style, // 위치, 크기같은 스타일을 설정할수 있다
pub background_color: BackgroundColor, // 배경색을 설정할수 있다
pub border_color: BorderColor, // 아웃라인 색상을 설정할수 있다
pub focus_policy: FocusPolicy,
pub transform: Transform, // 기본 정보에서 값을 추가하여 조정한다
pub global_transform: GlobalTransform,
pub visibility: Visibility, // 보이는지 안보이는지를 설정할수 있다
pub inherited_visibility: InheritedVisibility,
pub view_visibility: ViewVisibility,
pub z_index: ZIndex, // 번들이 겹첬을때 보이는 우선순위를 설정한다
}
예시 사용법은 다음과 같다
fn startup(
// 엔티티를 스폰하기 위해서 commands를 추가해준다
mut commands: Commands,
) {
// commands.sapwn는 엔티티/번들 을 스폰하는 메서드이다
commands.spawn(
// 2d카메라를 기본 형식으로 스폰한다
Camera2dBundle::default(),
);
commands.spawn(NodeBundle {
style: Style {
// 크기를 100px로 설정한다
width: Val::Px(100.0),
height: Val::Px(100.0),
// 위치를 위로부터100px, 왼쪽으로부터100px로 설정한다
top: Val::Px(100.0),
left: Val::Px(100.0),
..Default::default()
},
//배경색을 흰색으로 설정한다
background_color: BackgroundColor(Color::hex("#ffffff").unwrap()),
..Default::default()
});
}
ImageBundle
만약 NodeBunddle
에 사진을 넣고싶다면 이걸 쓰면 된다. 여기에서는 NodeBunddle과 다르게 사진을 추가할수있는 image
속성과 사진의 크기를 조정할수있는 image_size
가 추가로 있다
세팅
일단 이미지를 불러와야해서 assets폴더를 만들어주고 아무 사진이나 assets폴더에 넣는다 경로는 이렇다
assets/
- test.png // 나는 귀여운 ferris사진을 test.png라는 이름으로 넣었다
src/
- main.rs
Cargo.lock
Cargo.toml
예시 코드
fn startup(
// 엔티티를 스폰하기 위해서 commands를 추가해준다
mut commands: Commands,
// assets폴더를 로드하기 위해서 AssetServer를 추가해준다
assets_server: Res<AssetServer>,
) {
// commands.sapwn는 엔티티/번들 을 스폰하는 메서드이다
commands.spawn(
// 2d카메라를 기본 형식으로 스폰한다
Camera2dBundle::default(),
);
commands.spawn(ImageBundle {
style: Style {
// 크기를 100px로 설정한다
width: Val::Px(100.0),
height: Val::Px(100.0),
// 위치를 위로부터100px, 왼쪽으로부터100px로 설정한다
top: Val::Px(100.0),
left: Val::Px(100.0),
..Default::default()
},
// assets폴더에서 test.png를 로드한다
image: assets_server.load("test.png").into(),
//배경색을 흰색으로 설정한다
..Default::default()
});
}
SpriteBunddle
SpriteBunddle
은 기본적으로 중항에 정렬된다는 특징이 있다 ui를 만드는게 아니라면 이걸 쓰면 된다.
pub struct SpriteBundle {
pub sprite: Sprite, // 스프라이트의 크기, 위치, 색상등을 조정할수 있다.
pub transform: Transform,
pub global_transform: GlobalTransform,
pub texture: Handle<Image>,
pub visibility: Visibility,
pub inherited_visibility: InheritedVisibility,
pub view_visibility: ViewVisibility,
}
fn startup(
// 엔티티를 스폰하기 위해서 commands를 추가해준다
mut commands: Commands,
// assets폴더를 로드하기 위해서 AssetServer를 추가해준다
assets_server: Res<AssetServer>,
) {
// commands.sapwn는 엔티티/번들 을 스폰하는 메서드이다
commands.spawn(
// 2d카메라를 기본 형식으로 스폰한다
Camera2dBundle::default(),
);
commands.spawn(SpriteBundle {
// assets폴더에서 test.png를 로드한다 (여기선 .into는 굳이 안써도 됨)
texture: assets_server.load("test.png"),
//배경색을 흰색으로 설정한다
..Default::default()
});
}