Component Design Pattern
nei Game Engines
23/02/2023
HELLO WORLD!
Marco Secchi
Web: marcosecchi.it
● Ingegneria Informatica - Politecnico di Milano
● Freelancer - 2005/Present
● NABA Lecturer - 2016/Present
● NABA Lead Advisor - 2022/Present
● AIV - 2022/Present
● Teacher:
○ ZuruTech
○ DigitalBros Game Academy
○ HDEMIA Santa Giulia
● Envato Reviewer - 2009/2015
Il resto lo trovate su LinkedIn…
https://www.linkedin.com/in/secchimarco/
BIO
I GAME ENGINE
Qualche nozione prima di cominciare
UN GAME ENGINE E’ UNA COSA COMPLESSA
● Centinaia (o migliaia) di asset, di diversi tipi:
○ Grafica 2D (texture, sprite)
○ Modelli 3D (geometria, scheletri)
○ Animazioni e sequenze animate (cut scenes)
○ Suoni, musica e voice-over
○ Testi
○ Parti di livello (props, blueprints, prefabs)
○ Livelli
○ Etc.
● E non dimentichiamoci del codice…
Un game engine è composto da due componenti principali
Rilevo
evento
Editor
Gira sul PC
dello sviluppatore
Serve per creare e
organizzare gli assets
Rilevo
evento
Runtime
Gira sull’hardware
del giocatore
“Esegue” gli assets sotto
forma di applicazione
EDITOR E RUNTIME
Utente
Input
Output
Game
INTERAZIONE CON L’UTENTE
Get
Input
Update
Quit
Init
Render
GAME LOOP
● Input
○ Rilevamento delle interazioni del giocatore (gamepad, tastiera, mouse)
○ Analisi dei dati in funzione della situazione
● Update
○ Calcolo del movimento del giocatore e della telecamera
○ Simulazione dei nemici e della fisica
○ Applicazione della logica di gioco
● Render
○ Output 3D della visuale dal punto di vista della telecamera
○ Output audio in 2D/stereo
ESEMPIO: SPACE SHOOTER
● Il Game Loop continua a ripetersi, anche in assenza di interazioni da parte del
giocatore. Ci sono operazioni che non possono aspettare:
○ Di gioco: fisica, nemici, altri giocatori, effetti visuali, etc.
○ Non di gioco: interfaccia utente, gestione network, etc.
TIME WAITS FOR NOBODY
COMPONENT PATTERN
Siamo qui per questo…
“Allow a single entity to span multiple domains
without coupling the domain to each other.”
INTENT
MOTIVATION
● Gli oggetti gestiti da un game engine necessitano di comportamenti
complessi combinati tra di loro
● Per progetti di medie/grosse dimensioni risulta impossibile implementare
queste logiche semplicemente tramite ereditarietà
● Spesso risulta impossibile conoscere quali capacità avrà un determinato
oggetto se non a runtime
● L’idea dietro questo pattern è avere la possibilità di aggiungere
comportamenti differenti (e disaccoppiati) ad un oggetto in modo da
renderlo più complesso e funzionale
PATTERN
● Una singola “entità” può comprendere più domini (collisioni, audio, logica di
movimento, etc.)
● Per mantenere ogni dominio isolato, il codice viene implementato in un
componente
● L’entità diventa un semplice contenitore di componenti
UNITY E COMPONENTI
● In Unity il pattern viene implementato tramite:
○ GameObjects: oggetti vuoti il cui compito è contenere componenti
○ Sottoclassi di MonoBehaviour: i componenti veri e propri
● Un GameObject possiede sempre almeno il componente Transform che
contiene le informazioni di Posizione/Rotazione/Scala dell’oggetto
Game Programming Patterns by Bob Nystrom
https://gameprogrammingpatterns.com/
APPROFONDIMENTI
AL LAVORO!
Apriamo Unity e cominciamo a creare i nostri componenti

Component Design Pattern nei Game Engine.pdf

  • 1.
    Component Design Pattern neiGame Engines 23/02/2023
  • 2.
  • 3.
    ● Ingegneria Informatica- Politecnico di Milano ● Freelancer - 2005/Present ● NABA Lecturer - 2016/Present ● NABA Lead Advisor - 2022/Present ● AIV - 2022/Present ● Teacher: ○ ZuruTech ○ DigitalBros Game Academy ○ HDEMIA Santa Giulia ● Envato Reviewer - 2009/2015 Il resto lo trovate su LinkedIn… https://www.linkedin.com/in/secchimarco/ BIO
  • 4.
    I GAME ENGINE Qualchenozione prima di cominciare
  • 5.
    UN GAME ENGINEE’ UNA COSA COMPLESSA ● Centinaia (o migliaia) di asset, di diversi tipi: ○ Grafica 2D (texture, sprite) ○ Modelli 3D (geometria, scheletri) ○ Animazioni e sequenze animate (cut scenes) ○ Suoni, musica e voice-over ○ Testi ○ Parti di livello (props, blueprints, prefabs) ○ Livelli ○ Etc. ● E non dimentichiamoci del codice…
  • 6.
    Un game engineè composto da due componenti principali Rilevo evento Editor Gira sul PC dello sviluppatore Serve per creare e organizzare gli assets Rilevo evento Runtime Gira sull’hardware del giocatore “Esegue” gli assets sotto forma di applicazione EDITOR E RUNTIME
  • 7.
  • 8.
  • 9.
    ● Input ○ Rilevamentodelle interazioni del giocatore (gamepad, tastiera, mouse) ○ Analisi dei dati in funzione della situazione ● Update ○ Calcolo del movimento del giocatore e della telecamera ○ Simulazione dei nemici e della fisica ○ Applicazione della logica di gioco ● Render ○ Output 3D della visuale dal punto di vista della telecamera ○ Output audio in 2D/stereo ESEMPIO: SPACE SHOOTER
  • 10.
    ● Il GameLoop continua a ripetersi, anche in assenza di interazioni da parte del giocatore. Ci sono operazioni che non possono aspettare: ○ Di gioco: fisica, nemici, altri giocatori, effetti visuali, etc. ○ Non di gioco: interfaccia utente, gestione network, etc. TIME WAITS FOR NOBODY
  • 11.
  • 12.
    “Allow a singleentity to span multiple domains without coupling the domain to each other.” INTENT
  • 13.
    MOTIVATION ● Gli oggettigestiti da un game engine necessitano di comportamenti complessi combinati tra di loro ● Per progetti di medie/grosse dimensioni risulta impossibile implementare queste logiche semplicemente tramite ereditarietà ● Spesso risulta impossibile conoscere quali capacità avrà un determinato oggetto se non a runtime ● L’idea dietro questo pattern è avere la possibilità di aggiungere comportamenti differenti (e disaccoppiati) ad un oggetto in modo da renderlo più complesso e funzionale
  • 14.
    PATTERN ● Una singola“entità” può comprendere più domini (collisioni, audio, logica di movimento, etc.) ● Per mantenere ogni dominio isolato, il codice viene implementato in un componente ● L’entità diventa un semplice contenitore di componenti
  • 15.
    UNITY E COMPONENTI ●In Unity il pattern viene implementato tramite: ○ GameObjects: oggetti vuoti il cui compito è contenere componenti ○ Sottoclassi di MonoBehaviour: i componenti veri e propri ● Un GameObject possiede sempre almeno il componente Transform che contiene le informazioni di Posizione/Rotazione/Scala dell’oggetto
  • 16.
    Game Programming Patternsby Bob Nystrom https://gameprogrammingpatterns.com/ APPROFONDIMENTI
  • 17.
    AL LAVORO! Apriamo Unitye cominciamo a creare i nostri componenti