bevy
의 ecs
에 대해서 관심을 가지게 되어서 Getting Start
를 따라하면서 공부한 내용을 정리한다. 링크는 아래와 같다.
https://bevy.org/learn/quick-start/getting-started/apps/
ECS
란?Entity Component System
의 약자이다. ECS
가 가지는 특성에 대해 간단히 알아보겠다.
ECS
사용해보기App
이란?// bevy break out
use bevy::prelude::*;
#[derive(Component)]
struct Person;
#[derive(Component)]
struct Name(String);
fn setup(mut command: Commands) {
command.spawn((Person, Name("kimwoojun".to_string())));
}
fn say_hello(query: Query<(&Name, &Person)>) {
for person in &query {
println!("hello {}", person.0.0);
}
}
fn change_name(mut query: Query<&mut Name>) {
for mut name in &mut query {
name.0 = "홍길동".to_string();
println!("changed name: {}", name.0);
}
}
fn main() {
App::new()
.add_systems(Startup, setup)
.add_systems(
Update,
(say_hello, change_name)
)
.run();
}
아직은 정확히 이해하지는 못했지만 나름 해석을 해보았다.
1. Person
이라는 마커 컴포넌트를 하나 만들어준다. 식별을 위해서 사용한다고 한다.
2. Name
이라는 컴포넌트를 생성해주고 튜플 구조체로 만들어서 String
값을 가지도록 한다.
3. setup
함수를 최초 실행 시 호출하여 entity
를 생성한다.
4. add_systems
를 통해 정해진 문법으로 등록한다.
실행 시 위와 같은 결괏값이 나온다.
기본적으로 병렬로 실행하기 때문에 업데이트 순서가 보장되지는 않는 것 같다. 순서를 보장하기 위한 방법도 있는데 나중에 더 자세히 공부해 보겠다.
Data-Oriented-Programming
데이터 자체를 최우선으로 생각하고 데이터를 중심으로 프로그램을 구성하는 패러다임이다. 이런 방식으로 사고를 하는 게 꽤 어려운 것 같다. 그러나 새로운 주제라서 흥미롭고 재미있는 것 같다. 조금씩 이해하려고 노력해 보겠다. 다음에는 실제 2d를 만들어보고 싶다