Johdatus ECS-arkkitehtuuriin
Mitä Entity Component System tarkoittaa käytännössä pelimoottorin kontekstissa?
Entity Component System (ECS) on suosittu tapa järjestää pelimoottorin data ja logiikka. Tässä artikkelissa käydään läpi peruskäsitteet ja miksi ECS sopii hyvin suorituskykyiseen koodiin.
Entity
Entity on kevyt tunniste — käytännössä vain numero tai handle, johon komponentit liitetään.
Component
Komponentti on pelkkää dataa: sijainti, nopeus, mesh-viite. Ei logiikkaa.
System
Systemit iteroivat komponentteja ja päivittävät tilaa. Logiikka on erotettu datasta.
Kaavio
flowchart LR
Entity --> Component
Component --> System
System --> Entity
Esimerkki C++:lla
struct Position { float x, y; };
struct Velocity { float dx, dy; };
void movement_system(std::span<Entity> entities) {
for (auto e : entities) {
auto& pos = registry.get<Position>(e);
const auto& vel = registry.get<Velocity>(e);
pos.x += vel.dx;
pos.y += vel.dy;
}
}
Komponenttien määrä entiteetillä on tyypillisesti pieni; päivityskaava on \(O(n \cdot c)\), missä \(c\) on keskimääräinen komponenttimäärä per entiteetti.
Tämä on placeholder-artikkeli teeman testausta varten.