엔터티 생성하고 이동하기
화면에 요소를 배치해 보세요.
엔터티 생성하고 이동하기은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
Commands: 지연된 생성
시스템이 병렬로 실행되는 동안에는 World를 직접 변경할 수 없습니다. 대신 Commands를 통해 구조적 변경을 대기열에 추가합니다.
생성, 제거, 컴포넌트 추가 작업은 기록되었다가 일정 단계가 끝날 때 적용되므로 안전한 접근이 유지됩니다.
fn setup(mut commands: Commands) {
commands.spawn_empty();
}Bundle로 생성하기
bundle은 함께 삽입되는 컴포넌트 그룹입니다. 가장 간단한 bundle은 컴포넌트 튜플입니다.
Bevy는 튜플의 각 요소를 연결할 컴포넌트로 처리하므로, 한 번의 생성 호출로 엔터티에 시작 데이터를 모두 제공할 수 있습니다.
fn setup(mut commands: Commands) {
commands.spawn((
Position { x: 0.0, y: 0.0 },
Velocity { x: 1.5, y: 0.0 },
Player,
));
}카메라로 보기
카메라 없이는 아무것도 렌더링되지 않습니다. 2D 게임에서는 시작 시스템에서 Camera2d를 생성합니다.
카메라 자체도 카메라 컴포넌트를 가진 엔터티입니다. 이는 ECS의 일관성을 보여 주는 또 다른 예입니다. 장면의 모든 요소가 엔터티입니다.
fn setup(mut commands: Commands) {
commands.spawn(Camera2d::default());
}스프라이트 생성하기
무언가를 그리려면 엔터티에 Sprite와 Transform을 제공하십시오. Transform은 월드 공간에서 위치, 회전, 크기를 담습니다.
색이 지정된 스프라이트에는 이미지 리소스가 필요하지 않으므로, 아트를 가져오기 전에 이동을 프로토타이핑할 때 유용합니다.
commands.spawn((
Sprite::from_color(Color::srgb(0.2, 0.7, 1.0), Vec2::new(40.0, 40.0)),
Transform::from_xyz(0.0, 0.0, 0.0),
Velocity { x: 80.0, y: 0.0 },
));Transform과 사용자 지정 Position 비교
실제 Bevy 게임에서는 렌더링이 Transform을 직접 읽기 때문에 사용자 지정 Position보다 기본 제공 Transform을 주로 이동합니다.
이동 값은 Vec3입니다. 2D에서는 x와 y를 변경하고 그리기 순서를 위해 z를 유지합니다.
#[derive(Component)]
struct Velocity { x: f32, y: f32 }
fn apply_velocity(mut q: Query<(&mut Transform, &Velocity)>) {
for (mut tf, vel) in &mut q {
tf.translation.x += vel.x;
tf.translation.y += vel.y;
}
}가변적으로 쿼리 순회하기
컴포넌트 데이터를 변경하려면 &mut T를 요청하고 &mut query를 순회하십시오. 각 항목은 가변 참조를 제공합니다.
Bevy는 서로 충돌하는 가변 접근을 두 시스템이 동시에 보유하지 않도록 보장하므로, 다른 시스템이 실행되는 중에도 이 반복문은 안전합니다.
fn move_all(mut q: Query<&mut Transform, With<Player>>) {
for mut tf in &mut q {
tf.translation.x += 1.0;
}
}여러 엔터티 생성하기
반복문을 사용하면 레벨을 채울 수 있습니다. Rust의 for 반복문 안에서 spawn을 호출하여 장애물 격자나 적 무리를 만드십시오.
각 반복은 자체 명령을 대기열에 추가하고, 모든 명령은 단계 경계에서 함께 적용됩니다.
fn spawn_row(mut commands: Commands) {
for i in 0..5 {
commands.spawn((
Sprite::from_color(Color::WHITE, Vec2::splat(20.0)),
Transform::from_xyz(i as f32 * 30.0, 0.0, 0.0),
));
}
}엔터티 제거하기
commands.entity(id).despawn()으로 엔터티를 완전히 제거하십시오. 그러면 해당 컴포넌트가 해제되고 엔터티 인덱스가 재사용됩니다.
일반적으로 엔터티의 Entity ID를 조회한 시스템에서 제거합니다. 예를 들어 화면 밖으로 나간 탄환을 제거할 수 있습니다.
fn cleanup(mut commands: Commands, q: Query<(Entity, &Transform)>) {
for (e, tf) in &q {
if tf.translation.y > 600.0 {
commands.entity(e).despawn();
}
}
}나중에 컴포넌트 추가하기
insert를 사용하면 실행 중에 기존 엔터티에 새 컴포넌트를 연결할 수 있습니다. 강화된 플레이어에게 Shield 태그를 부여할 때 사용하는 방식입니다.
제거도 remove::<T>()를 사용하여 같은 방식으로 수행합니다. 둘 다 구조적 변경이므로 Commands를 통해 처리됩니다.
commands.entity(player).insert(Shield { hits: 3 });
// later
commands.entity(player).remove::<Shield>();레이어링을 위한 Z
2D에서는 Transform의 이동 값에 있는 z가 그리기 순서를 결정합니다. z가 높을수록 위에 렌더링됩니다.
배경에는 낮은 z를, 플레이어에는 더 높은 값을 지정하여 스프라이트가 배경 뒤로 사라지지 않게 하십시오.
// background behind, player in front
commands.spawn((bg_sprite, Transform::from_xyz(0.0, 0.0, 0.0)));
commands.spawn((player_sprite, Transform::from_xyz(0.0, 0.0, 10.0)));연결하여 실행하기
Startup에서 생성하고 Update에서 이동하십시오. 시작 시스템은 카메라와 엔터티를 한 번 만들고, 업데이트 시스템은 매 프레임 이를 진행시킵니다.
이렇게 분리하면 초기화 코드가 매 프레임 실행되는 핵심 경로에 들어가지 않습니다.
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, apply_velocity)
.run();빠른 확인
구조적 변경이 어떻게 적용되는지 생각해 보십시오.
복습: 생성과 이동
Commands를 통해 bundle로 엔터티를 생성하고, Sprite와 Transform으로 렌더링하며, Update 시스템에서 Transform을 변경하여 이동시킵니다.
엔터티 제거와 컴포넌트 삽입도 명령으로 처리됩니다. 다음에는 키보드 입력과 실제 경과 시간에 반응하도록 이동을 만들어 보겠습니다.
자주 묻는 질문
“엔터티 생성하고 이동하기” 강의는 무료인가요?
네 — “엔터티 생성하고 이동하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
“엔터티 생성하고 이동하기”에서 뭘 배우나요?
화면에 요소를 배치해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“엔터티 생성하고 이동하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- ECS 사고방식
- 엔터티 생성하고 이동하기
- 입력과 시간 처리하기
- 충돌과 게임 상태