Skip to content

Entity Component System Model

BiceMaster edited this page Nov 23, 2012 · 8 revisions

Vad är en entity?

En entity representerar ett spelobjekt i världen, som t.ex ett träd, en cykel, en spelare, ett vapen. En tom entity i sig ger ingen direkt funktionalitet. Ett Entity kan jämföras med ett Substantiv.

(Insert picture)

Vad den minimalt innehåller är:

  • En lista med noll till flera olika komponenter
  • Ett unikt id eller namn

Vad är en komponent?

Varje entity har komponenter som beskriver hur den interagerar med/påverkar världen. Man kan jämföra en komponent med ett adjektiv. Antag att vi har en entity-typ "Högtalare". Entiteten skulle då kunna innehålla följande komponenter:

  • Mesh (en grafisk representation av hur högtalaren ser ut)
  • Position (var den står)
  • Bounding Volym (Vad den har för sorts collisionsvolym, t.ex. box)
  • Renderer (vilken sorts renderare den använder)
  • Ljudkälla (högtalaren emittar ett ljud)

Vad är ett system (eller subsystem)?

Ett system kan jämföras med ett verb, den utför något.

  • Körs kontinuerligt (och kan utökas till att köras multitrådat)
  • Hanterar hur komponenter hos en entitet uppdateras.
  • Hanterar enbart komponenter som är relevanta att uppdatera för det givna systemet. Exempelvis: Antag att det finns komponenter av typerna Position, Audio Source och Listener. Ett AudioSystem skulle där hämta ut alla entities som har en position och en audio source, samt alla entities som har en position och en listener (En listener snappar upp ljud från audio sources), och sedan processa dessa komponenter.

(Exempelfigur på Audio)

Ett RenderingSystem skulle t.ex hantera entities med komponenter av typena Position, Rotation, Skala (Eller om alla tre ligger i en Transform-komponent), och Renderer.

(Exempelfigur på Rendering)

Återanvändning av entities och components

Shared data

Om olika entiteter använder samma resurser exempelvis StaticMesh, Textur och så vidare kan användadet av FlyWeight pattern utnyttjas i kombination med factories/managers.

Assemblage

Ett assemblage är en mall för en entity och vad den ska innehålla. Användning av assemblage innebär att man har fördefinierat olika typer av entities och dess innehåll (i t.ex. en textfil), så att man snabbt kan konstruera dem under uppstart och i runtime.

Management

Hantering av kopplingar mellan entities och komponenter kommer fungera på samma sätt som i Artemis framework (insert ref)