Entitetskomponentsystem
Hva er Entity-Component-System?
Entity-Component–System (ECS) er et arkitektonisk mønster. Dette mønsteret er mye brukt i spillapplikasjonsutvikling. ECS følger komposisjonen over arveprinsippet, som gir bedre fleksibilitet og hjelper deg med å identifisere enheter der alle objekter i et spills scene anses som en enhet.
ECS-programmering er en metode for å skrive kode som gir høy ytelse som standard.
Dette systemet består av tre ledd.
- Entity
- Komponent
- System
La oss lære dette konseptet i detalj:
I denne veiledningen for enhetskomponentsystem lærer du:
- Hva er Entity-Component-System?
- Hva er en enhet?
- Hva er en komponent?
- Hva er systemet?
- sammensetning
- Fordel med ECS
- Ulemper ved bruk av ECS
- Eksempel på enhetskomponentsystem
- Dataflyt i ECS:
Hva er en enhet?
En enhet er et distinkt objekt som representerer en aktør i et simulert rom. Den har ikke faktiske data eller atferd. Denne komponenten gir en enhet sine data. Det er vanligvis en strut eller ordbok.
For eksempel hvis vi simulerer et spills univers Minecraft, alle de synlige, håndgripelige "tingene" i spilluniverset som er regnet i entiteter.
Hva er en komponent?
En komponent er en singulær atferd som tilskrives en enhet. Navnet på et element bør ideelt sett kommunisere hvilken oppførsel enheten vil utvise. Selve komponenten har imidlertid ingen oppførsel. De er gjenbrukbare moduler som er knyttet til enheter. Komponenten gir utseende, oppførsel og funksjonalitet.
All logikk er implementert ved hjelp av komponenter som hjelper deg å definere ulike typer objekter ved å blande og konfigurere komponenter.
Hva er systemet?
Et system vil iterere mange komponenter for å utføre lavt nivå
funksjoner som å gjengi grafikk, utføre fysikk
beregninger eller veisøking. Det tilbyr globalt omfang, administrasjon og tjenester for klasser av komponenter.
Systemer er imidlertid ikke valgfrie, men vi kan bruke dem til å skille logikk og data. Det hjelper deg også med å håndtere de logiske komponentene, fungere som databeholdere.
Eksempler
- Tyngdekraft (Velocity) – Det hjelper deg å akselerere hastighet på grunn av tyngdekraften
- Det legger til hastighet til posisjon
- Angir en bot-kontrollert enhets input i henhold til en AI-agent
- Render (Posisjon, Sprite) – Tegner sprites
- Spillerkontroll (Input Player) hjelper deg med å stille inn den spillerkontrollerte enhetens inngang i henhold til en kontroller.
sammensetning
En komposisjon er et element du kan legge til flere komponenter for å legge til ekstra utseende, oppførsel eller funksjonalitet. Du kan også oppdatere komponentverdiene for å konfigurere enheten.
Fordel med ECS
Her er fordelene ved å bruke ECS i programmering:
- Du kan lage kortere og mindre komplisert kode.
- Veldig fleksibel Emergent atferd.
- Det gir en arkitektur for 3D- og VR-utvikling.
- Aktiverer skripting etter oppførsel av ikke-teknologiske.
- Det hjelper deg å dele opp dine monolittiske klasser.
- Enkelt avfall og kompatibilitet.
- Et enkelt alternativ for enhetstesting og hån.
- Den lar deg bygge en VR-applikasjon når det gjelder kompleksitet.
- Erstatt komponenter med hånte komponenter under kjøring.
- Det hjelper deg å utvide nye funksjoner.
- ECS er en vennlig metode for parallell-behandling og multi-threading,
- Hjelper deg å skille data fra funksjoner som virker på dem
- Gi bedre fleksibilitet når du definerer objekter ved å blande med gjenbrukbare deler.
- Den tilbyr en ren design ved bruk av frakobling, innkapsling, modularisering, gjenbruksmetoder.
Ulemper ved bruk av ECS
Her er noen ulemper ved å bruke ECS
- Ikke så konkret definert som andre mønstre som for eksempel MVC.
- Vanskelig å påføre riktig, lett å misbruke Gode komponenter krever mer tenkning rundt design
- ECS krever skriving av mange små systemer som allittererer på potensielt et stort antall enheter, som utvikler risikoen for å skrive svært ineffektiv kode
- De fleste har aldri hørt om dette mønsteret.
Eksempel på enhetskomponentsystem
La oss se på eksemplet på en kanin:
Se den stiplede boksen rundt disse komponentene. Det er bunny-enheten - ingenting enn en beholder med komponenter. Du kan også definere entiteter som en aggregering av et hvilket som helst undersett av komponenter.
Du kan se bildet ovenfor. Det er en av kanin-enhetene - ikke noe mer enn en beholder med komponenter. Du kan definere entiteter som en aggregering av en hvilken som helst undergruppe av komponenter, som Gulrot:
Dataflyt i ECS:
Systematferd er ECS-modellen endres fra en tilstand til en annen.
La oss forstå å bruke dette eksemplet:
Atferd: "En kanin som sitter på et tre faller på grunn av tyngdekraften."
Hvordan implementere oppførselen ovenfor?
Du kan gjøre det med z-verdi på mer enn 0 som reduseres over tid til 0.
Atferd: "Levende vesener eldes."
La oss se hvordan du kan implementere denne oppførselen?
Du kan gjøre det slik at Living Components har aldersverdi, som øker over tid.
Sammendrag:
- Entity-Component–System (ECS) er et arkitektonisk mønster.
- En enhet er et distinkt objekt som representerer en aktør i et simulert rom.
- En komponent er en singulær atferd som tilskrives en enhet.
- Et system vil iterere mange komponenter for å utføre funksjoner på lavt nivå som å gjengi grafikk, utføre fysikkberegninger eller stifinning.
- En komposisjon er et element du kan legge til flere komponenter for å legge til ekstra utseende, oppførsel eller funksjonalitet.
- Ved å bruke ECS-mønster kan du lage kortere og mindre komplisert kode.
- Det er ikke så konkret definert som andre mønstre som MVC.
- Systematferd er ECS-modellen endres fra en tilstand til en annen.