Insegnamento LAB. REALTA' VIRTUALE E REALTA' AUMENTATA II

Corso
Programmazione e gestione di sistemi informatici
Codice insegnamento
A003667
Curriculum
Comune a tutti i curricula
Docente
Gilberto Zinourov Roncalli Di Montorio
Docenti
  • Gilberto Zinourov Roncalli Di Montorio
Ore
  • 36 ore - Gilberto Zinourov Roncalli Di Montorio
CFU
3
Regolamento
Coorte 2024
Erogato
2025/26
Attività
Altro
Ambito
Tirocini formativi e di orientamento
Settore
NN
Tipo insegnamento
Obbligatorio (Required)
Tipo attività
Attività formativa monodisciplinare
Lingua insegnamento
Italiano
Contenuti
Presentazione di un percorso introduttivo e pratico all’uso del motore Unity, con l’obiettivo di illustrare non solo le funzionalità principali della piattaforma, ma soprattutto un metodo strutturato di sviluppo applicabile in un contesto professionale. Sono stati trattati concetti avanzati di programmazione come il Service Locator, il Broadcaster Pattern e l’implementazione di State Machine, al fine di fornire agli studenti strumenti concreti per gestire la comunicazione e il coordinamento tra componenti nelle scene di Unity.
Testi di riferimento
Documentazione pubblica Unity: https://docs.unity3d.com/6000.1/Documentation/Manual/UnityManual.html
Obiettivi formativi
Fornire agli studenti un metodo di sviluppo applicabile in contesti professionali, utilizzando come piattaforma di riferimento Unity. Particolare attenzione è stata data all’organizzazione del lavoro in ambienti paralleli, tipica dei progetti complessi, affrontando problematiche legate alla scalabilità e alla manutenibilità del codice.
Prerequisiti
Conoscenze di base di programmazione a oggetti (preferibilmente in C#) e familiarità con i concetti fondamentali dello sviluppo software. Non è richiesta una conoscenza pregressa di Unity, ma è consigliata per una migliore comprensione dei contenuti avanzati trattati durante il corso.
Metodi didattici
Lezioni frontali in presenza, con esempi pratici e dimostrazioni dal vivo all’interno dell’ambiente di sviluppo Unity.
Altre informazioni
Il corso ha avuto un taglio fortemente pratico, volto a favorire l’apprendimento attraverso l’esperienza diretta nello sviluppo di progetti Unity. Ogni lezione ha alternato momenti teorici a dimostrazioni live e implementazioni guidate, per permettere agli studenti di comprendere e applicare immediatamente i concetti trattati. È stata posta particolare attenzione alla scrittura di codice riutilizzabile, modulare e manutenibile, con l’obiettivo di fornire una base solida per affrontare progetti reali anche in contesti collaborativi e professionali.
Modalità di verifica dell'apprendimento
La valutazione si basa sulla presentazione di un progetto sviluppato dallo studente utilizzando l’architettura illustrata durante il corso. Il progetto deve includere almeno un paio di funzionalità di media complessità, implementate e funzionanti all’interno dell’ambiente Unity. Verrà valutata la correttezza dell’implementazione, la qualità del codice e la capacità di applicare i concetti di design pattern e organizzazione del lavoro trattati durante le lezioni.
Programma esteso
Lezione 1: Introduzione – Struttura del corso e basi di scripting
• Obiettivo: Familiarizzare gli studenti con il flusso di lavoro di uno sviluppatore Unity, partendo dalle basi di C#. 1. Introduzione al corso e al progetto finale • Collegare il lavoro al corso: l'importanza di sviluppare sistemi scalabili e modulari. • Panoramica degli argomenti trattati: scripting, interazioni, gestione dati, ottimizzazione. • Presentazione del progetto finale: un piccolo gioco con sistemi programmativi robusti. 2. Ripasso base di C# • Struttura di un programma: classi, metodi, proprietà. • Variabili, tipi di dato e scope. • Introduzione a eventi e delegati. 3. Basi di scripting in Unity • Differenza tra Update, FixedUpdate, e LateUpdate. • Interazioni tra script e componenti Unity (GetComponent, AddComponent). • Esercizio pratico: Creare uno script per muovere un oggetto con la tastiera. Lezione 2: Programmare il controllo del giocatore • Obiettivo: Creare un controller del personaggio interamente scriptato. 1. Movimento del personaggio • Script per movimento 2D o 3D (a seconda del progetto scelto). • Utilizzo di Rigidbody per movimenti fisici. • Input dinamico: tastiera, mouse e controller. 2. Camera dinamica • Script per seguire il personaggio con la camera. • Gestione di transizioni fluide tra diverse inquadrature. 3. Esercizio pratico • Creare un controller completo con movimenti e camera. Lezione 3: Interazioni tra oggetti e gestione eventi • Obiettivo: Creare sistemi di interazione tra oggetti tramite eventi programmativi. 1. Trigger e collisioni • Gestione di eventi OnTriggerEnter e OnCollisionEnter. • Creazione di oggetti interattivi: porte, piattaforme mobili, oggetti raccolti. 2. Introduzione a eventi personalizzati • Creazione di un sistema di eventi: Publisher/Subscriber pattern. • Collegare più script attraverso eventi per modularità. 3. Esercizio pratico • Programmare un sistema di interazione dinamica (es. raccogliere oggetti e attivare eventi). Lezione 4: Gestione dati e logica di gioco • Obiettivo: Implementare logiche di gameplay e strutture dati per gestire il gioco. 1. Scriptable Objects • Creare oggetti dati per configurare oggetti in modo dinamico. • Uso pratico per creare nemici, oggetti, o livelli personalizzabili. 2. Gestione dati runtime • Creazione di un singleton per dati globali (es. punteggio, vite, inventario). • Serializzazione e salvataggio/caricamento dei dati. 3. Esercizio pratico • Creare un sistema di gestione del punteggio e salvarlo su disco. Lezione 5: Programmare l'intelligenza artificiale (AI) • Obiettivo: Creare un sistema di AI semplice per NPC o nemici. 1. Introduzione a navmesh e pathfinding • Generazione di un NavMesh e scripting del movimento degli NPC. • Comportamento base: seguire il giocatore, pattugliare. 2. Stati e comportamento (FSM) • Implementare una Finite State Machine per i nemici. • Cambiare comportamento in base a trigger o condizioni. 3. Esercizio pratico • Creare un NPC che pattuglia e insegue il giocatore quando entra nel suo raggio. Lezione 6: UI dinamica e gestione interfacce • Obiettivo: Integrare UI con logica di gioco e creare interfacce reattive. 1. Programmazione UI • Gestione di Canvas, Text, e Slider. • Aggiornamento dinamico di elementi UI (es. barra della salute, timer). 2. Sistemi di menu e transizioni • Creazione di un menu principale. • Transizioni tra scene e gestione dei dati globali. 3. Esercizio pratico • Creare un’interfaccia che mostri vita, punteggio, e notifiche. Lezione 7: Gestione del progetto e modularità • Obiettivo: Organizzare un progetto complesso in modo scalabile. 1. Gestione delle dipendenze • Introduzione ai principi di programmazione modulare. • Separazione della logica in script dedicati (Single Responsibility Principle). 2. Eventi e pattern avanzati • Pattern Observer per notifiche tra script. • Dependency Injection per ridurre i collegamenti diretti. 3. Esercizio pratico • Riorganizzare gli script del progetto per modularità e leggibilità. Lezione 8: Ottimizzazione e debugging • Obiettivo: Migliorare le prestazioni e risolvere bug comuni. 1. Ottimizzazione di script • Ridurre il carico su CPU e GPU: FixedUpdate vs Update. • Pooling degli oggetti per gestire istanziazione dinamica. 2. Debugging in Unity • Uso della console e dei breakpoint. • Profiling per individuare colli di bottiglia. 3. Esercizio pratico • Ottimizzare una scena complessa e debug di uno script. Lezione 9: Progetto finale e consegne • Obiettivo: Refinire il progetto e presentare il lavoro finale. 1. Finalizzazione del progetto • Debug e polishing finale. • Creazione di una build eseguibile. 2. Presentazione e feedback • Ogni studente presenta il proprio progetto, spiegando il codice e le scelte implementative. 3. Conclusione del corso • Feedback finale e suggerimenti per continuare a sviluppare.
Obiettivi Agenda 2030 per lo sviluppo sostenibile