Sistema di componenti di entità

Cos'è il sistema entità-componente?

Entity-Component–System (ECS) è un pattern architettonico. Questo pattern è ampiamente utilizzato nello sviluppo di applicazioni di gioco. ECS segue il principio di composizione sull'ereditarietà, che offre una migliore flessibilità e ti aiuta a identificare entità in cui tutti gli oggetti nella scena di un gioco sono considerati un'entità.

La programmazione ECS è un metodo di scrittura del codice che fornisce prestazioni elevate per impostazione predefinita.

Questo sistema è composto da tre termini.

  1. Entità
  2. Componente
  3. Sistema

Impariamo questo concetto nel dettaglio:

In questo tutorial sul sistema entità-componente imparerai:

Cos'è un'entità?

Un'entità è un oggetto distinto che rappresenta un attore in uno spazio simulato. Non contiene dati o comportamenti reali. Questo componente fornisce a un'entità i suoi dati. Tipicamente è un puntone o un dizionario.

Ad esempio, se stiamo simulando l'universo di un gioco Minecraft, tutte le "cose" visibili e tangibili nell'universo del gioco vengono conteggiate in entità.

Che cos'è un componente?

Un componente è un comportamento singolare attribuito a un'entità. Il nome di un elemento dovrebbe idealmente comunicare quale comportamento mostrerà l'entità. Tuttavia, il componente stesso non ha alcun comportamento. Sono moduli riutilizzabili collegati alle entità. Il componente fornisce aspetto, comportamento e funzionalità.

Tutta la logica è implementata utilizzando componenti che ti aiutano a definire diversi tipi di oggetti mescolando e configurando i componenti.

Cos'è il sistema?

Un sistema ripeterà molti componenti per eseguire operazioni di basso livello

funzioni come il rendering della grafica, l'esecuzione della fisica

calcoli o ricerca di percorsi. Offre ambito globale, gestione e servizi per classi di componenti.

Tuttavia, i sistemi non sono opzionali, ma possiamo usarli per separare logica e dati. Ti aiuta anche a gestire i componenti logici e ad agire come contenitori di dati.

Esempi

  • Gravità (Velocità) – Ti aiuta ad accelerare la velocità a causa della gravità
  • Aggiunge velocità alla posizione
  • Imposta l'input di un'entità controllata dal bot in base a un agente AI
  • Render (Posizione, Sprite) – Disegna gli sprite
  • Il controllo del giocatore (Input Player) ti aiuta a impostare l'input dell'entità controllata dal giocatore in base a un controller.

Composizione

Una composizione è un elemento a cui è possibile allegare più componenti per aggiungere ulteriore aspetto, comportamento o funzionalità. Puoi anche aggiornare i valori del componente per configurare l'entità.

Vantaggio dell'ECS

Ecco i vantaggi dell'utilizzo di ECS nella programmazione:

  • Puoi creare codice più breve e meno complicato.
  • Comportamento emergente molto flessibile.
  • Fornisce un'architettura per lo sviluppo 3D e VR.
  • Abilita lo scripting in base al comportamento dei non tecnici.
  • Ti aiuta a dividere le tue classi monolitiche.
  • Rifiuto facile e compossibilità.
  • Un'opzione semplice per test unitari e derisioni.
  • Permette di realizzare un'applicazione VR in termini di complessità.
  • Sostituisci i componenti con componenti derisi in fase di esecuzione.
  • Ti aiuta ad estendere nuove funzionalità.
  • ECS è un metodo amichevole per l'elaborazione parallela e il multi-threading,
  • Ti aiuta a separare i dati dalle funzioni che agiscono su di essi
  • Fornire una migliore flessibilità durante la definizione degli oggetti combinandoli con parti riutilizzabili.
  • Offre un design pulito utilizzando metodi di disaccoppiamento, incapsulamento, modularizzazione e riutilizzabilità.

Svantaggi dell'utilizzo di ECS

Ecco alcuni svantaggi dell'utilizzo di ECS

  • Non così concretamente definito come altri modelli come MVC.
  • Difficile da applicare correttamente, facile da usare in modo improprio. I buoni componenti richiedono una maggiore attenzione al design
  • ECS richiede la scrittura di molti piccoli sistemi che allitterano su un numero potenzialmente enorme di entità, il che sviluppa il rischio di scrivere codice molto inefficiente
  • La maggior parte delle persone non ha mai nemmeno sentito parlare di questo modello.

Esempio di sistema di componenti di entità

Consideriamo l'esempio di un coniglio:

Osservate la casella tratteggiata attorno a questi componenti. Questa è l'entità bunny, niente più che un contenitore di componenti. Potete anche definire le entità come un'aggregazione di qualsiasi sottoinsieme di componenti.

Puoi vedere l'immagine sopra indicata. È una delle entità coniglietto, niente più che un contenitore di componenti. Puoi definire le entità come aggregazione di qualsiasi sottoinsieme di componenti, come Carrot:

Flusso di dati in ECS:

Il comportamento dei sistemi secondo il modello ECS è il cambiamento da uno stato all'altro.

Cerchiamo di capire usando questo esempio:

Comportamenti: “Un coniglio seduto su un albero cade a causa della gravità”.

Come implementare il comportamento di cui sopra?

Puoi farlo con un valore z superiore a 0 che diminuisce nel tempo fino a 0.

Comportamento: “Gli esseri viventi invecchiano”.

Vediamo come puoi implementare questo comportamento?

Puoi fare in modo che i Componenti viventi abbiano un valore di età, che aumenta nel tempo.

Sommario:

  • Entity-Component–System (ECS) è un modello architettonico.
  • Un'entità è un oggetto distinto che rappresenta un attore in uno spazio simulato.
  • Un componente è un comportamento singolare attribuito a un'entità.
  • Un sistema itererà molti componenti per eseguire funzioni di basso livello come il rendering della grafica, l'esecuzione di calcoli fisici o l'individuazione del percorso.
  • Una composizione è un elemento a cui è possibile allegare più componenti per aggiungere ulteriore aspetto, comportamento o funzionalità.
  • Utilizzando il pattern ECS puoi creare codice più breve e meno complicato.
  • Non è definito concretamente come altri modelli come MVC.
  • Il comportamento dei sistemi secondo il modello ECS è il cambiamento da uno stato all'altro.