Asta07
482 words
2 minutes
Zero부터 시작하는 bevy - 4

번들에 컴포넌트 삽입하기#

번들을 삽입하려면 스폰을 한후 .insert(컴포넌트)를 사용하여 삽입을 할수 있다

#[derive(Component)]
struct MyCustomComponent {
    name: String,
}

fn setup(mut commands: Commands) {
    // ..생략
    commands
        .spawn(SpriteBundle {
            sprite: Sprite {
                custom_size: Some(Vec2::new(100.0, 100.0)), // 크기 설정
                ..Default::default()
            },
            transform: Transform::from_translation(Vec3::new(0.0, 0.0, 0.0)), // 기본위치 설정
            ..Default::default()
        })
        // sprite번들에 MyCustomComponent 컴포넌트를 추가해서 특정 정보를 저장
        .insert(MyCustomComponent {
            name: "aaa".to_string(),
        });

    commands
        .spawn(SpriteBundle {
            sprite: Sprite {
                custom_size: Some(Vec2::new(100.0, 100.0)),
                ..Default::default()
            },
            transform: Transform::from_translation(Vec3::new(-150.0, -100.0, 0.0)),
            ..Default::default()
        })
        .insert(MyCustomComponent {
            name: "bbb".to_string(),
        });
}

실행결과

번들 값 수정하기#

번들의 값을 가저오거나 수정하기 위해서는 Query문을 자세히 알아야한다.
기본적으로 Query문은 Query<(&가, &mut 저, mut 오, 려, &는, &mut 값), With<컴포넌트>> 이런식의 타입을 가지고 있고 가저오려는 값에는 다음과 같은 값이 들어갈수 있다(비교적 많이쓰는것만 써저있어 다른것도 들어갈수있다)

이름/반환타입설명
Transfrom위치값을 변경할수있는 값을 반환한다 *
Stylenodebunddle종류의 번들의 스타일을 변경 가능하다
Entity나중에 번들을 디스폰 할때 사용된다 *
BackgroundColornodebunddle종류의 번들의 스타일을 변경 가능하다
컴포넌트(자기자신)자신의 값을 얻어올수있다
fn main() {
    App::new()
        // ...생략
        .add_systems(Update, component_move) // 계속 실행되는 시스템
        .run();
}

fn component_move(
    // 지금 생성되있는 모든 MyCustomComponent 컴포넌트의 정보를 가져옴
    // 수정해야해서 mut q로 받는다
    mut q: Query<(&mut Transform, &MyCustomComponent, &Style), With<MyCustomComponent>>,
) {
    // 소환한 모든 컴포넌트를 반복문을 사용하여 출력
    for (mut transform, custome_comp, e) in &mut q {
        // 아까 생성한 컴포넌트의 이름을 출력
        transform.translation.x += 1.;
        println!(
            "{}: {:?}",
            custome_comp.name,
            (transform.translation.x, transform.translation.y)
        );
    }
}
실행화면