Entity Component System
โก รlykรคs yhteenveto
Entiteetti-komponentti-jรคrjestelmรค eli ECS on pelien kehittรคmisessรค laajalti kรคytetty arkkitehtuurimalli. Se suosii sommittelua periytymisen sijaan: entiteetit ovat tunnisteita, komponentit sisรคltรคvรคt dataa ja jรคrjestelmรคt sisรคltรคvรคt logiikan, joka toimii vastaavien komponenttien omaaville entiteeteille.

Mikรค on Entity-Component-System?
Entity-Component-System (ECS) on arkkitehtoninen malli. Tรคtรค mallia kรคytetรครคn laajasti pelisovelluskehityksessรค. ECS noudattaa koostumusta periytymisperiaatteen yli, mikรค tarjoaa parempaa joustavuutta ja auttaa sinua tunnistamaan entiteetit, joissa kaikkia pelin kohtauksen kohteita pidetรครคn kokonaisuutena.
ECS-ohjelmointi on menetelmรค koodin kirjoittamiseen, joka tarjoaa oletuksena korkean suorituskyvyn.
Tรคmรค jรคrjestelmรค koostuu kolmesta termistรค.
- Entity
- komponentti
- jรคrjestelmรค
Opitaanpa tรคmรค kรคsite yksityiskohtaisesti:
Mikรค on entiteetti?
Entiteetti on erillinen objekti, joka edustaa nรคyttelijรครค simuloidussa tilassa. Sillรค ei ole todellista dataa tai kรคyttรคytymistรค. Tรคmรค komponentti antaa entiteetille sen tiedot. Se on tyypillisesti tukijalka tai sanakirja.
Esimerkiksi, jos simuloimme pelin maailmankaikkeutta Minecraft, kaikki nรคkyvรคt, konkreettiset "asiat" peliuniversumissa, kuten, lasketaan kokonaisuuksiksi.
Mikรค on komponentti?
Komponentti on entiteetille mรครคritetty yksittรคinen kรคyttรคytyminen. Elementin nimen tulisi ihannetapauksessa kertoa, millaista kรคyttรคytymistรค kokonaisuus osoittaa. Itse komponentilla ei kuitenkaan ole kรคyttรคytymistรค. Ne ovat uudelleenkรคytettรคviรค moduuleja, jotka on liitetty kokonaisuuksiin. Komponentti tarjoaa ulkonรครถn, kรคyttรคytymisen ja toimivuuden.
Kaikki logiikka toteutetaan komponenteilla, joiden avulla voit mรครคrittรครค erityyppisiรค objekteja sekoittamalla ja konfiguroimalla komponentteja.
Mikรค on jรคrjestelmรค?
Jรคrjestelmรค iteroi monia komponentteja suorittaakseen alhaisen tason
toiminnot, kuten grafiikan renderรถinti, fysiikan suorittaminen
laskelmat tai polunhaku. Se tarjoaa maailmanlaajuisen laajuuden, hallinnan ja palvelut komponenttiluokille.
Jรคrjestelmรคt eivรคt kuitenkaan ole valinnaisia, vaan voimme kรคyttรครค niitรค logiikan ja tiedon erottamiseen. Se auttaa myรถs kรคsittelemรครคn loogisia komponentteja, toimimaan tietosรคiliรถinรค.
Esimerkit
- Gravity (Velocity) โ Se auttaa sinua nopeuttamaan painovoiman aiheuttamaa nopeutta
- Se lisรครค nopeutta asemaan
- Asettaa bot-ohjatun entiteetin syรถtteen tekoรคlyagentin mukaan
- Renderรถi (sijainti, sprite) โ Piirtรครค spritejรค
- Player Control (Input Player) auttaa sinua asettamaan soittimen ohjaaman entiteetin tulon ohjaimen mukaan.
Koostumus
Koostumus on elementti, johon voit liittรครค lisรครค komponentteja ulkonรครถn, kรคyttรคytymisen tai toimivuuden lisรครคmiseksi. Voit myรถs pรคivittรครค komponenttien arvot entiteetin mรครคrittรคmiseksi.
ECS:n etu
Tรคssรค ovat ECS:n kรคytรถn edut ohjelmoinnissa:
- Voit luoda lyhyemmรคn ja vรคhemmรคn monimutkaisen koodin.
- Erittรคin joustava Emergent-kรคyttรคytyminen.
- Se tarjoaa arkkitehtuurin 3D- ja VR-kehitykseen.
- Mahdollistaa ei-teknikon komentosarjojen kรคytรถn.
- Se auttaa sinua jakamaan monoliittiset luokat.
- Helppo hylรคtรค ja koostettavuus.
- Helppo vaihtoehto yksikkรถtestaukseen ja pilkkaamiseen.
- Sen avulla voit rakentaa VR-sovelluksen monimutkaisuuden kannalta.
- Korvaa komponentit pilkatuilla komponenteilla ajon aikana.
- Se auttaa sinua laajentamaan uusia ominaisuuksia.
- ECS on ystรคvรคllinen menetelmรค rinnakkaiskรคsittelyyn ja monisรคikeiseen,
- Auttaa erottamaan tiedot niihin vaikuttavista toiminnoista
- Tarjoa parempaa joustavuutta, kun mรครคritรคt esineitรค sekoittamalla uudelleenkรคytettรคviin osiin.
- Se tarjoaa puhtaan suunnittelun kรคyttรคmรคllรค irrotus-, kapselointi-, modularisointi- ja uudelleenkรคytettรคvyysmenetelmiรค.
ECS:n kรคytรถn haitat
Tรคssรค on joitain ECS:n kรคytรถn haittapuolia
- Ei niin konkreettisesti mรครคritelty kuin muut mallit, kuten MVC.
- Vaikea levittรครค oikein, helppo kรคyttรครค vรครคrin Hyvรคt komponentit vaativat enemmรคn suunnittelua
- ECS vaatii monien pienten jรคrjestelmien kirjoittamista, jotka alliteroivat mahdollisesti suuria mรครคriรค entiteettejรค, jotka muodostavat riskin kirjoittaa erittรคin tehotonta koodia
- Useimmat ihmiset eivรคt ole koskaan edes kuulleet tรคstรค mallista.
Esimerkki entiteettikomponenttijรคrjestelmรคstรค
Katsotaanpa esimerkkiรค pupusta:
Katso nรคiden komponenttien ympรคrillรค oleva katkoviiva. Se on pupukokonaisuus โ ei muuta kuin komponenttien sรคiliรถ. Voit myรถs mรครคrittรครค entiteetit minkรค tahansa komponenttien osajoukon yhdistelmรคksi.
Nรคet yllรค olevan kuvan. Se on yksi pupukokonaisuuksista โ ei muuta kuin komponenttien sรคiliรถ. Voit mรครคrittรครค entiteetit minkรค tahansa komponenttien, kuten porkkanan, yhdistelmรคnรค:
Tiedonkulku ECS:ssรค:
Jรคrjestelmรคn kรคyttรคytyminen on ECS-malli on muutos tilasta toiseen.
Ymmรคrrรคmme tรคmรคn esimerkin avulla:
Kรคyttรคytyminen: "Puun pรครคllรค istuva pupu kaatuu painovoiman vaikutuksesta."
Kuinka toteuttaa yllรค oleva toimintatapa?
Voit tehdรค sen z-arvolla, joka on suurempi kuin 0, joka pienenee ajan myรถtรค nollaan.
Kรคyttรคytyminen: "Elรคvรคt olennot ikรครคntyvรคt."
Katsotaanpa, kuinka voit toteuttaa tรคmรคn kรคyttรคytymisen?
Voit tehdรค siitรค niin, ettรค Living Componentsilla on ikรคarvo, joka kasvaa ajan myรถtรค.


