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.

  • ๐ŸŽฎ ECS-malli: Entiteetti-komponentti-jรคrjestelmรค on pelikehityksessรค yleinen arkkitehtuurimalli.
  • ๐Ÿงฉ Sรคvellys: ECS suosii sommittelua periytymisen sijaan suuremman joustavuuden saavuttamiseksi.
  • ๐Ÿ†” Entiteetti: Entiteetti on yleiskรคyttรถinen tunniste peliobjektille.
  • ๐Ÿ“ฆ komponentti: Komponentti on yksinkertainen tietosรคiliรถ, jolla ei ole mitรครคn toimintaa.
  • โš™๏ธ Jรคrjestelmรค: Jรคrjestelmรค sisรคltรครค logiikan, joka kรคsittelee entiteettejรค tietyillรค komponenteilla.
  • ๐Ÿš€ Suorituskyky: Datakeskeinen asettelu parantaa vรคlimuistin kรคyttรถรค ja suorituskykyรค ajonaikana.
  • ๐Ÿค– Tekoรคlyn kulma: Tekoรคlypohjaiset pelityรถkalut luovat komponentteja ja virittรคvรคt jรคrjestelmiรค automaattisesti.

Entity Component System Archirakenne

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รค.

  1. Entity
  2. komponentti
  3. 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รค.

UKK

Kolme osaa ovat entiteetit, komponentit ja jรคrjestelmรคt. Entiteetit ovat tunnisteita, komponentit ovat tietosรคilรถjรค ja jรคrjestelmรคt sisรคltรคvรคt logiikan, joka toimii tiettyjรค komponentteja sisรคltรคvien entiteettien kanssa.

Kompositio vรคlttรครค syviรค ja jรคykkiรค luokkahierarkioita. Yhdistรคmรคllรค pieniรค komponentteja kehittรคjรคt voivat lisรคtรค tai poistaa toimintoja joustavasti, mikรค on helpompi yllรคpitรครค ja laajentaa kuin periytyminen suurissa peleissรค.

ECS on yleinen pelimoottoreissa ja tehokkaissa simulaatioissa. Kehykset, kuten Unity DOTS, Bevy ja EnTT kรคyttรคvรคt ECS:รครค hallitakseen tuhansia objekteja tehokkaasti datakeskeisen suunnittelun avulla.

Kyllรค. Tekoรคlytyรถkalut ehdottavat komponenttien rakenteita, luovat jรคrjestelmรคlogiikan ja tasapainottavat peliparametreja. Tรคmรค nopeuttaa prototyyppien kehitystรค.ping ja auttaa kehittรคjiรค hallitsemaan monimutkaisten entiteettien toimintaa suurissa kohtauksissa.

tekoรคly Agentit lukevat komponenttidataa jรคrjestelmien kautta hahmottaakseen pelimaailmaa ja pรครคttรครคkseen toimista. Datakeskeinen ECS-asettelu tekee tilan syรถttรคmisestรค koneoppimismalleihin tehokasta.

Tiivistรค tรคmรค viesti seuraavasti: