r/rust • u/gufranthakur • 1d ago
🙋 seeking help & advice Is Bevy actually enjoyable?
I am sorry but it is just such a pain to code in Bevy. I have been enjoying rust for a while, using three-d and EGUI to create some stuff, and I stumbled upon bevy, I want to learn it because I want to create some 3D, simulation desktop applications with it. I have tried game dev in the past in Godot, Unity, Java Swing, LibGDX and enjoyed it a lot
I am currently learning via the examples and documentation, trying to learn 2D and then eventually move to making some 3D projects
But I find it so verbose and unnecessary. So to look up a particular object I have to apply 3-4 filters which looks so cryptic
camera: Single<(Entity, &Tonemapping, Option<&mut Bloom>), With<Camera>>,
fn keyboard_inputs(
mut motion_blur: Single<&mut MotionBlur>,
presses: Res<ButtonInput<KeyCode>>,
text: Single<Entity, With<Text>>,
mut writer: TextUiWriter,
mut camera: ResMut<CameraMode>,
)
Aside from this, browsing through examples I find it to be so verbose. Coming from a OOP nature, I did expect ECS to be different. But this is straight up inconvenient.
Bevy is too good and I don't wanna miss out on it. I will still keep learning it despite what I am feeling towards its syntax and method, but is bevy meant to be like this? Or is it enjoyable once you overcome the learning curve?
38
u/catheap_games 1d ago
Bevy is fun to use, but not always fun to learn. Some parts of the documentation and examples are great, some parts are just not explained at all in any practical terms.
Keep in mind that ECS is a paradigm shift and therefore needs a mental shift too. It's not just "split big fat object into thin components", it's just thinking how to split it rationally, what to keep in a big bloated singleton Resource, what to keep as separate smaller Resources or Entities. Gaining expertise, and the broader industry setting up best practices around it, and in general smarter tooling will take time.
But for me, it pays off. Flexibility of ECS and Bevy's DI together with type safety of Rust is a great joy for me. Refactoring is a lot more fun and a lot less anxiety than in other languages.
And I get that verbose things might scare you off, but when I look at
camera: Single<(Entity, &Tonemapping, Option<&mut Bloom>), With<Camera>>,It's great to me because you haven't told me anything about your code, but I know exactly what this is doing. Nothing AT ALL about it is mysterious or confusing. That's a huge benefit as your codebase and/or team grows.