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.