Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

It is a very different and seemingly weird approach. It's almost like writing SQL queries for your game world (e.g. "find all entities with a Flying component and attach them a WooshSound component). A clever memory layout makes these queries super fast.

It makes separation of concerns very natural. Different parts/layers of the game, like inputs, AI, sounds, graphics, effects and animations can be coded separately. You don't end up with "god class" for player's object that does a bit of everything. You have player entity that has components attached, and each system operates on its own set of components.

I can't really do it justice in a comment. It's a quite different approach, so it's not directly comparable. It's like OOP vs Rust's traits. ECS happens to match Rust's memory model and traits incredibly well.

Here's a more in-depth talk about this: https://www.youtube.com/watch?v=aKLntZcp27M



Even the Data-oriented design[0] is eyes opening (which is part of the ECS).

The classic example is[1]: Instead of having a list of structs, where each struct get some types (int, float, ...), you use one struct, where the fields are list of types (array of int, array of floats, ...)

[0] -- https://en.wikipedia.org/wiki/Data-oriented_design [1] -- https://en.wikipedia.org/wiki/AoS_and_SoA


Unity uses ECS, just in a more visual way.


I did some Unity3d back in 2013, I don't remember using ECS (intentionally?). After a quick search, it's seem that the MonoBehaviour are the old way and ECS the new ways? That's nice.


When you drag and drop something into an object, you are actually adding a component to an entity.

It's kinda behind the scene ECS.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: