Sustav komponenti entiteta
โก Pametni saลพetak
Entitet-Komponenta-Sustav, ili ECS, je arhitektonski obrazac koji se ลกiroko koristi u razvoju igara. Daje prednost kompoziciji nad nasljeฤivanjem: entiteti su identifikatori, komponente sadrลพe podatke, a sustavi sadrลพe logiku koja djeluje na entitete s odgovarajuฤim komponentama.

ล to je entitet-komponenta-sustav?
Entitet-komponenta-sustav (ECS) je arhitektonski obrazac. Ovaj obrazac se ลกiroko koristi u razvoju aplikacija za igre. ECS slijedi kompoziciju umjesto naฤela nasljeฤivanja, ลกto nudi bolju fleksibilnost i pomaลพe vam identificirati entitete gdje se svi objekti u sceni igre smatraju entitetom.
ECS programiranje je metoda pisanja koda koja prema zadanim postavkama pruลพa visoke performanse.
Ovaj sustav se sastoji od tri termina.
- Entitetska
- Sastavni
- sistem
Nauฤimo ovaj koncept u detalje:
ล to je Entitet?
Entitet je poseban objekt koji predstavlja aktera u simuliranom prostoru. Nema stvarnih podataka ili ponaลกanja. Ova komponenta daje entitetu njegove podatke. To je obiฤno strut ili rjeฤnik.
Na primjer, ako simuliramo svemir igre Minecraft, sve vidljive, opipljive 'stvari' u svemiru igre raฤunaju se u entitete.
ล to je komponenta?
Komponenta je pojedinaฤno ponaลกanje pripisano entitetu. Ime elementa idealno bi trebalo komunicirati kakvo ฤe ponaลกanje entitet pokazati. Meฤutim, sama komponenta se ne ponaลกa. To su moduli za viลกekratnu upotrebu koji su priloลพeni entitetima. Komponenta osigurava izgled, ponaลกanje i funkcionalnost.
Sva logika implementirana je pomoฤu komponenti koje vam pomaลพu definirati razliฤite vrste objekata mijeลกanjem i konfiguriranjem komponenti.
ล to je sustav?
Sustav ฤe ponavljati mnoge komponente kako bi izvrลกio nisku razinu
funkcije kao ลกto su renderiranje grafike, izvoฤenje fizike
proraฤuni ili pronalaลพenje puta. Nudi globalni opseg, upravljanje i usluge za klase komponenti.
Meฤutim, sustavi nisu izborni, ali ih moลพemo koristiti za odvajanje logike i podataka. Takoฤer vam pomaลพe rukovati logiฤkim komponentama, ponaลกati se kao spremnici podataka.
Primjeri
- Gravitacija (brzina) โ Pomaลพe vam da ubrzate brzinu zbog gravitacije
- Dodaje brzinu poloลพaju
- Postavlja unos entiteta kojim upravlja bot prema AI agentu
- Render (Pozicija, Sprite) โ Crtanje spriteova
- Kontrola igraฤa (Input Player) pomaลพe vam da postavite unos entiteta kojim upravlja igraฤ u skladu s kontrolerom.
Sastav
Kompozicija je element na koji moลพete priloลพiti viลกe komponenti kako biste dodali dodatni izgled, ponaลกanje ili funkcionalnost. Takoฤer moลพete aลพurirati vrijednosti komponente da biste konfigurirali entitet.
Prednost ECS-a
Evo prednosti koriลกtenja ECS-a u programiranju:
- Moลพete kreirati kraฤi i manje komplicirani kod.
- Vrlo fleksibilno Emergentno ponaลกanje.
- Pruลพa arhitekturu za 3D i VR razvoj.
- Omoguฤuje skriptiranje prema ponaลกanju netehniฤara.
- Pomaลพe vam da podijelite svoje monolitne klase.
- Jednostavan otpad i moguฤnost sastavljanja.
- Jednostavna opcija za jediniฤno testiranje i ismijavanje.
- Omoguฤuje vam izradu VR aplikacije u smislu sloลพenosti.
- Zamijenite komponente ismijanim komponentama tijekom izvoฤenja.
- Pomaลพe vam proลกiriti nove znaฤajke.
- ECS je prijateljska metoda za paralelnu obradu i viลกenitnost,
- Pomaลพe vam odvojiti podatke od funkcija koje djeluju na njih
- Omoguฤite bolju fleksibilnost pri definiranju objekata mijeลกanjem s dijelovima koji se mogu ponovno koristiti.
- Nudi ฤisti dizajn koristeฤi metode odvajanja, kapsuliranja, modularizacije i ponovne upotrebe.
Nedostaci koriลกtenja ECS-a
Evo nekoliko nedostataka koriลกtenja ECS-a
- Nije tako konkretno definiran kao drugi obrasci kao ลกto je MVC.
- Teลกko ih je pravilno primijeniti, lako ih je zloupotrijebiti. Dobre komponente zahtijevaju viลกe razmiลกljanja o dizajnu
- ECS zahtijeva pisanje mnogo malih sustava koji alteriraju na potencijalno veliki broj entiteta, ลกto dovodi do rizika pisanja vrlo neuฤinkovitog koda
- Veฤina ljudi nikada nije ni ฤula za ovaj obrazac.
Primjer sustava komponente entiteta
Pogledajmo primjer zeฤiฤa:
Pogledajte crtkani okvir oko ovih komponenti. To je entitet zeca โ niลกta drugo nego spremnik komponenti. Takoฤer moลพete definirati entitete kao agregaciju bilo kojeg podskupa komponenti.
Moลพete vidjeti gornju sliku. To je jedan od entiteta zeฤiฤa โ niลกta viลกe od spremnika komponenti. Entitete moลพete definirati kao agregaciju bilo kojeg podskupa komponenti, poput Mrkve:
Protok podataka u ECS-u:
Ponaลกanje sustava je ECS model promjena iz jednog stanja u drugo.
Razumimo na ovom primjeru:
Ponaลกanje: โZeko koji sjedi na drvetu pada zbog gravitacije.โ
Kako primijeniti gore navedeno ponaลกanje?
To moลพete uฤiniti pomoฤu z vrijednosti veฤe od 0 koja se s vremenom smanjuje na 0.
Ponaลกanje: โลฝiva biฤa stare.โ
Da vidimo kako moลพete implementirati ovo ponaลกanje?
Moลพete napraviti tako da ลพive komponente imaju dobnu vrijednost, koja se s vremenom poveฤava.


