SlideShare a Scribd company logo
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

More Related Content

Similar to Component Design Pattern nei Game Engine.pdf

Cell Programming 1
Cell Programming 1Cell Programming 1
Cell Programming 1
Vincenzo De Maio
 
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
Francesco Sciuti
 
Introduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio FieramoscaIntroduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio Fieramosca
LibreItalia
 
Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)
Francesco Ronchi
 
Security Capture the Flag
Security Capture the FlagSecurity Capture the Flag
Security Capture the Flag
Bergamo Linux Users Group
 
Design of G.E.M.I.X.: Game Engine Movie Interaction eXperience
Design of G.E.M.I.X.: Game Engine Movie Interaction eXperienceDesign of G.E.M.I.X.: Game Engine Movie Interaction eXperience
Design of G.E.M.I.X.: Game Engine Movie Interaction eXperience
Antonio Notarangelo
 
Lego vs Ruzzle @ codemotion 2013
Lego vs Ruzzle @ codemotion 2013Lego vs Ruzzle @ codemotion 2013
Lego vs Ruzzle @ codemotion 2013
Alberto Sarullo
 
Deno - L'anagramma di node
Deno - L'anagramma di nodeDeno - L'anagramma di node
Deno - L'anagramma di node
Francesco Sciuti
 
Wearable technologies, why not? | Creativity Day 2015
Wearable technologies, why not? | Creativity Day 2015Wearable technologies, why not? | Creativity Day 2015
Wearable technologies, why not? | Creativity Day 2015
Andrea Trento
 
Da Rotor a .NET Core ed indietro: Microsoft <3 Open Source
Da Rotor a .NET Core ed indietro: Microsoft <3 Open SourceDa Rotor a .NET Core ed indietro: Microsoft <3 Open Source
Da Rotor a .NET Core ed indietro: Microsoft <3 Open Source
Andrea Saltarello
 
Big data
Big dataBig data
Big data
Franco Tampieri
 
Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !
Gianfranco Pulitano
 
My life with Android @ JUG Torino 2012
My life with Android @ JUG Torino 2012My life with Android @ JUG Torino 2012
My life with Android @ JUG Torino 2012
Francesco Ronchi
 
Perché contribuire a LibreOffice - Gabriele Ponzo
Perché contribuire a LibreOffice - Gabriele PonzoPerché contribuire a LibreOffice - Gabriele Ponzo
Perché contribuire a LibreOffice - Gabriele Ponzo
LibreItalia
 
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto
 
Andrea Cartotto Le carte vincenti del Software Libero
Andrea Cartotto Le carte vincenti del Software LiberoAndrea Cartotto Le carte vincenti del Software Libero
Andrea Cartotto Le carte vincenti del Software Libero
LibreItalia
 
GNU/Linux PowerPC Notebook Linux day 2015 Milano
GNU/Linux PowerPC Notebook Linux day 2015 MilanoGNU/Linux PowerPC Notebook Linux day 2015 Milano
GNU/Linux PowerPC Notebook Linux day 2015 Milano
Roberto Innocenti
 
Introduzione alla realizzazione di videogiochi - Presentazione del corso
Introduzione alla realizzazione di videogiochi - Presentazione del corsoIntroduzione alla realizzazione di videogiochi - Presentazione del corso
Introduzione alla realizzazione di videogiochi - Presentazione del corso
Pier Luca Lanzi
 
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Daniele Ferla
 
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
 

Similar to Component Design Pattern nei Game Engine.pdf (20)

Cell Programming 1
Cell Programming 1Cell Programming 1
Cell Programming 1
 
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
 
Introduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio FieramoscaIntroduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio Fieramosca
 
Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)
 
Security Capture the Flag
Security Capture the FlagSecurity Capture the Flag
Security Capture the Flag
 
Design of G.E.M.I.X.: Game Engine Movie Interaction eXperience
Design of G.E.M.I.X.: Game Engine Movie Interaction eXperienceDesign of G.E.M.I.X.: Game Engine Movie Interaction eXperience
Design of G.E.M.I.X.: Game Engine Movie Interaction eXperience
 
Lego vs Ruzzle @ codemotion 2013
Lego vs Ruzzle @ codemotion 2013Lego vs Ruzzle @ codemotion 2013
Lego vs Ruzzle @ codemotion 2013
 
Deno - L'anagramma di node
Deno - L'anagramma di nodeDeno - L'anagramma di node
Deno - L'anagramma di node
 
Wearable technologies, why not? | Creativity Day 2015
Wearable technologies, why not? | Creativity Day 2015Wearable technologies, why not? | Creativity Day 2015
Wearable technologies, why not? | Creativity Day 2015
 
Da Rotor a .NET Core ed indietro: Microsoft <3 Open Source
Da Rotor a .NET Core ed indietro: Microsoft <3 Open SourceDa Rotor a .NET Core ed indietro: Microsoft <3 Open Source
Da Rotor a .NET Core ed indietro: Microsoft <3 Open Source
 
Big data
Big dataBig data
Big data
 
Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !
 
My life with Android @ JUG Torino 2012
My life with Android @ JUG Torino 2012My life with Android @ JUG Torino 2012
My life with Android @ JUG Torino 2012
 
Perché contribuire a LibreOffice - Gabriele Ponzo
Perché contribuire a LibreOffice - Gabriele PonzoPerché contribuire a LibreOffice - Gabriele Ponzo
Perché contribuire a LibreOffice - Gabriele Ponzo
 
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
 
Andrea Cartotto Le carte vincenti del Software Libero
Andrea Cartotto Le carte vincenti del Software LiberoAndrea Cartotto Le carte vincenti del Software Libero
Andrea Cartotto Le carte vincenti del Software Libero
 
GNU/Linux PowerPC Notebook Linux day 2015 Milano
GNU/Linux PowerPC Notebook Linux day 2015 MilanoGNU/Linux PowerPC Notebook Linux day 2015 Milano
GNU/Linux PowerPC Notebook Linux day 2015 Milano
 
Introduzione alla realizzazione di videogiochi - Presentazione del corso
Introduzione alla realizzazione di videogiochi - Presentazione del corsoIntroduzione alla realizzazione di videogiochi - Presentazione del corso
Introduzione alla realizzazione di videogiochi - Presentazione del corso
 
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
Desdinova Engine: Motore grafico 3D per rendering di ambienti outdoor in temp...
 
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
 

More from Commit University

Alla scoperta dei Vector Database e dei RAG
Alla scoperta dei Vector Database e dei RAGAlla scoperta dei Vector Database e dei RAG
Alla scoperta dei Vector Database e dei RAG
Commit University
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
Commit University
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Commit University
 
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdfBreaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Commit University
 
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdfAccelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Commit University
 
Slide-10years.pdf
Slide-10years.pdfSlide-10years.pdf
Slide-10years.pdf
Commit University
 
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Commit University
 
Vue.js slots.pdf
Vue.js slots.pdfVue.js slots.pdf
Vue.js slots.pdf
Commit University
 
Commit - Qwik il framework che ti stupirà.pptx
Commit - Qwik il framework che ti stupirà.pptxCommit - Qwik il framework che ti stupirà.pptx
Commit - Qwik il framework che ti stupirà.pptx
Commit University
 
Sviluppare da zero una Angular Web App per la PA
Sviluppare da zero una Angular Web App per la PASviluppare da zero una Angular Web App per la PA
Sviluppare da zero una Angular Web App per la PA
Commit University
 
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Commit University
 
Prisma the ORM that node was waiting for
Prisma the ORM that node was waiting forPrisma the ORM that node was waiting for
Prisma the ORM that node was waiting for
Commit University
 
Decision-making for Software Development Teams - Commit University
Decision-making for Software Development Teams - Commit UniversityDecision-making for Software Development Teams - Commit University
Decision-making for Software Development Teams - Commit University
Commit University
 
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Commit University
 
Prototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsPrototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step Functions
Commit University
 
KMM survival guide: how to tackle struggles between Kotlin and Swift
KMM survival guide: how to tackle struggles between Kotlin and SwiftKMM survival guide: how to tackle struggles between Kotlin and Swift
KMM survival guide: how to tackle struggles between Kotlin and Swift
Commit University
 
Da Vuex a Pinia: come fare la migrazione
Da Vuex a Pinia: come fare la migrazioneDa Vuex a Pinia: come fare la migrazione
Da Vuex a Pinia: come fare la migrazione
Commit University
 
Orchestrare Micro-frontend con micro-lc
Orchestrare Micro-frontend con micro-lcOrchestrare Micro-frontend con micro-lc
Orchestrare Micro-frontend con micro-lc
Commit University
 
Fastify has defeated Lagacy-Code
Fastify has defeated Lagacy-CodeFastify has defeated Lagacy-Code
Fastify has defeated Lagacy-Code
Commit University
 
SwiftUI vs UIKit
SwiftUI vs UIKitSwiftUI vs UIKit
SwiftUI vs UIKit
Commit University
 

More from Commit University (20)

Alla scoperta dei Vector Database e dei RAG
Alla scoperta dei Vector Database e dei RAGAlla scoperta dei Vector Database e dei RAG
Alla scoperta dei Vector Database e dei RAG
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdfBreaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
Breaking REST Chains_ A Fastify & Mercurius Pathway to GraphQL Glory.pdf
 
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdfAccelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-Slide.pdf
 
Slide-10years.pdf
Slide-10years.pdfSlide-10years.pdf
Slide-10years.pdf
 
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
 
Vue.js slots.pdf
Vue.js slots.pdfVue.js slots.pdf
Vue.js slots.pdf
 
Commit - Qwik il framework che ti stupirà.pptx
Commit - Qwik il framework che ti stupirà.pptxCommit - Qwik il framework che ti stupirà.pptx
Commit - Qwik il framework che ti stupirà.pptx
 
Sviluppare da zero una Angular Web App per la PA
Sviluppare da zero una Angular Web App per la PASviluppare da zero una Angular Web App per la PA
Sviluppare da zero una Angular Web App per la PA
 
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
Backstage l'Internal Developer Portal Open Source per una migliore Developer ...
 
Prisma the ORM that node was waiting for
Prisma the ORM that node was waiting forPrisma the ORM that node was waiting for
Prisma the ORM that node was waiting for
 
Decision-making for Software Development Teams - Commit University
Decision-making for Software Development Teams - Commit UniversityDecision-making for Software Development Teams - Commit University
Decision-making for Software Development Teams - Commit University
 
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
 
Prototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsPrototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step Functions
 
KMM survival guide: how to tackle struggles between Kotlin and Swift
KMM survival guide: how to tackle struggles between Kotlin and SwiftKMM survival guide: how to tackle struggles between Kotlin and Swift
KMM survival guide: how to tackle struggles between Kotlin and Swift
 
Da Vuex a Pinia: come fare la migrazione
Da Vuex a Pinia: come fare la migrazioneDa Vuex a Pinia: come fare la migrazione
Da Vuex a Pinia: come fare la migrazione
 
Orchestrare Micro-frontend con micro-lc
Orchestrare Micro-frontend con micro-lcOrchestrare Micro-frontend con micro-lc
Orchestrare Micro-frontend con micro-lc
 
Fastify has defeated Lagacy-Code
Fastify has defeated Lagacy-CodeFastify has defeated Lagacy-Code
Fastify has defeated Lagacy-Code
 
SwiftUI vs UIKit
SwiftUI vs UIKitSwiftUI vs UIKit
SwiftUI vs UIKit
 

Component Design Pattern nei Game Engine.pdf

  • 1. Component Design Pattern nei Game Engines 23/02/2023
  • 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 Qualche nozione prima di cominciare
  • 5. 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…
  • 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
  • 9. ● 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
  • 10. ● 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
  • 12. “Allow a single entity to span multiple domains without coupling the domain to each other.” INTENT
  • 13. 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
  • 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 Patterns by Bob Nystrom https://gameprogrammingpatterns.com/ APPROFONDIMENTI
  • 17. AL LAVORO! Apriamo Unity e cominciamo a creare i nostri componenti