ݺߣ

ݺߣShare 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
Ad

Recommended

Unity 3D a C# developer's POV
Unity 3D a C# developer's POV
Leonardo Alario
SVILUPPO DI VIDEOGIOCHI SU PIATTAFORMA ANDROID: TUTTA LA POTENZA SU DUE DIMEN...
SVILUPPO DI VIDEOGIOCHI SU PIATTAFORMA ANDROID: TUTTA LA POTENZA SU DUE DIMEN...
Danilo Riso
Android vs iOS
Android vs iOS
Domenico Gabriele
Lezione game making light
Lezione game making light
Campus La Camilla - Scuola di maker
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
jekil
Present kinect4 windows
Present kinect4 windows
I3P
Kinect and brave new applications
Kinect and brave new applications
Igor Antonacci
Modelli arduino
Modelli arduino
Demetrio Siragusa
Cell Programming 1
Cell Programming 1
Vincenzo De Maio
Microsoft Fast - Overview
Microsoft Fast - Overview
Francesco Sciuti
Introduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio Fieramosca
LibreItalia
Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)
Francesco Ronchi
Security 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 eXperience
Antonio Notarangelo
Lego vs Ruzzle @ codemotion 2013
Lego vs Ruzzle @ codemotion 2013
Alberto Sarullo
Deno - L'anagramma di node
Deno - L'anagramma di node
Francesco Sciuti
Wearable 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 Source
Andrea Saltarello
Big data
Big data
Franco Tampieri
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 2012
Francesco Ronchi
Perché 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
Andrea 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 Milano
Roberto Innocenti
Introduzione 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...
Daniele Ferla
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
Accessibilità ed equità digitale: un impegno, non una scelta
Accessibilità ed equità digitale: un impegno, non una scelta
Commit University
GitHub Copilot:vediamo chi comanda - Commit University.pdf
GitHub Copilot:vediamo chi comanda - Commit University.pdf
Commit University

More Related Content

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

Cell Programming 1
Cell Programming 1
Vincenzo De Maio
Microsoft Fast - Overview
Microsoft Fast - Overview
Francesco Sciuti
Introduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio Fieramosca
LibreItalia
Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)
Francesco Ronchi
Security 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 eXperience
Antonio Notarangelo
Lego vs Ruzzle @ codemotion 2013
Lego vs Ruzzle @ codemotion 2013
Alberto Sarullo
Deno - L'anagramma di node
Deno - L'anagramma di node
Francesco Sciuti
Wearable 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 Source
Andrea Saltarello
Big data
Big data
Franco Tampieri
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 2012
Francesco Ronchi
Perché 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
Andrea 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 Milano
Roberto Innocenti
Introduzione 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...
Daniele Ferla
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
Introduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio Fieramosca
LibreItalia
Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)
Francesco Ronchi
Design 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 2013
Alberto Sarullo
Wearable 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 Source
Andrea Saltarello
My 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 Ponzo
LibreItalia
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 Libero
LibreItalia
GNU/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 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...
Daniele Ferla
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti

More from Commit University (20)

Accessibilità ed equità digitale: un impegno, non una scelta
Accessibilità ed equità digitale: un impegno, non una scelta
Commit University
GitHub Copilot:vediamo chi comanda - Commit University.pdf
GitHub Copilot:vediamo chi comanda - Commit University.pdf
Commit University
Contract Driven Development - Branch 2024.pdf
Contract Driven Development - Branch 2024.pdf
Commit University
Cybersecurity & AI: Illusioni e Speranze
Cybersecurity & AI: Illusioni e Speranze
Commit University
Migliorare la Developer Experience in un mondo Cloud Native
Migliorare la Developer Experience in un mondo Cloud Native
Commit University
Scopri come sfruttare la potenza della Hybrid RAG
Scopri come sfruttare la potenza della Hybrid RAG
Commit University
Introduzione a AWS Forecast e SageMaker DeepAR: Prevedere la Domanda con il M...
Introduzione a AWS Forecast e SageMaker DeepAR: Prevedere la Domanda con il M...
Commit University
Oltre l'hype: vulnerabilità e limiti dell'intelligenza artificiale.pdf
Oltre l'hype: vulnerabilità e limiti dell'intelligenza artificiale.pdf
Commit University
Alla 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!
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)
Commit University
Breaking 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-ݺߣ.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-ݺߣ.pdf
Commit University
ݺߣ-10years.pdf
ݺߣ-10years.pdf
Commit University
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.pdf
Commit University
Commit - 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 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 ...
Commit University
Prisma the ORM that node was waiting for
Prisma the ORM that node was waiting for
Commit University
Accessibilità ed equità digitale: un impegno, non una scelta
Accessibilità ed equità digitale: un impegno, non una scelta
Commit University
GitHub Copilot:vediamo chi comanda - Commit University.pdf
GitHub Copilot:vediamo chi comanda - Commit University.pdf
Commit University
Contract Driven Development - Branch 2024.pdf
Contract Driven Development - Branch 2024.pdf
Commit University
Cybersecurity & AI: Illusioni e Speranze
Cybersecurity & AI: Illusioni e Speranze
Commit University
Migliorare la Developer Experience in un mondo Cloud Native
Migliorare la Developer Experience in un mondo Cloud Native
Commit University
Scopri come sfruttare la potenza della Hybrid RAG
Scopri come sfruttare la potenza della Hybrid RAG
Commit University
Introduzione a AWS Forecast e SageMaker DeepAR: Prevedere la Domanda con il M...
Introduzione a AWS Forecast e SageMaker DeepAR: Prevedere la Domanda con il M...
Commit University
Oltre l'hype: vulnerabilità e limiti dell'intelligenza artificiale.pdf
Oltre l'hype: vulnerabilità e limiti dell'intelligenza artificiale.pdf
Commit University
Alla 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!
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)
Commit University
Breaking 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-ݺߣ.pdf
Accelerating API Development: A Pit Stop with Gin-Gonic in Golang-ݺߣ.pdf
Commit University
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Commit University
Commit - 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 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 ...
Commit University
Prisma the ORM that node was waiting for
Prisma the ORM that node was waiting for
Commit University
Ad

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